Ouh la la. Visiblement je ne suis pas clair du tout !
Le contexte est le suivant :
Nous développons un logiciel en Java qui génère un cours qui se jouera en Flash.
Notre logiciel génère un moteur Flash et des fichiers annexes (XML, images, sons etc.) pour que le moteur Flash puisse diffuser le cours généré.
Tout cela marche fort bien.
Dans notre logiciel (qui est utilisé par le concepteur pédagogique et non par l'apprenant final) il est possible de placer les éléments des écrans du cours.
Afin que le placement puisse être Wysiwyg, nous shootons Flash et affichons la « photo » en Java.
Pour l'instant nous avons développé du code C++ qui shoote Flash dans une fenêtre hors écran. Et ceci à travers JNI pour que Java et C++ dialoguent tranquillement.
Hélas, l'ActiveX Flash est très mal écrit et n'est pas stable.
Du coup son plantage entraine le plantage de la JVM (du fait du JNI).
@Patrice : Si je comprends bien votre truc c'est pour pouvoir voir des animations flash dans des navigateurs qui ne supportent pas flash ?
M'enfin quelle idée de ne pas supporter flash ;-)
Non, l'apprenant doit obligatoirement avoir Flash. Le problème est juste pour faire du Wysiwyg. Notre approche implique de shooter du Flash. On ne peut pas jouer le Flash car notre moteur Flash ne fait que diffuser, il ne permet pas d'éditer (pour pleins de raison qu'il serait trop long à discuter ici).
@Jean-Baptiste (Briaud) : ... et alors ? Justement, la capture d'écran se passe dans une JVM qui n'à rien à voir avec Flash. Donc si flash plante, la JVM de capture d'écran n'est pas impactée.
La capture doit se faire hors écran. L'utilisateur ne doit pas voir des fenêtres intempestives apparaitre sur son écran.
En plus nous devons gérer les transparences. Pour ce faire on shoot deux fois, sur fond noir et sur fond blanc et on en déduit la transparence.
Je ne vois pas comment faire ça avec un copie d'écran AWT ?
Qui plus est, on doit pouvoir afficher différents rendus (celui du boutons, celui de l'image, du texte, des listes...) à des tailles différentes. Il faut donc pouvoir envoyer des infos à Flash et qu'il nous réponde quand il est prêt et enfin que l'on shoot.
Tout ça existe déjà en JNI. Il faut juste pouvoir placer cela dans une appli (préservation du process JVM) et pouvoir dialogue avec l'appli.
J'ai pensé à un système d'échange de fichiers, mais ça reste compliqué alors qu'à priori un InputStream et un OutputStream suffisent.
En fait je ne pensais pas avoir de soucis. Je pensais que le dialogue Java <=> C++ marcherait du premier coup, tellement c'est simple à imaginer
Erik
________________________________
Erik Mazoyer
Architecte, Chef de Projet
Tél : +33 9 51 85 70 59 | Mob. +33 6 65 31 19 96
Mél : ***@uni-learning.com<mailto:***@uni-learning.com>
Salle Connect : http://connect.uni-learning.com/emazoyer
U&I Learning France | 8, rue Henri Becquerel | 92508 Rueil-Malmaison Cedex
Tél. +33 1 41 96 96 70 | Fax +33 1 41 96 96 77| www.uni-learning.com<http://www.uni-learning.com/>
| Disclaimer | The information contained in this electronic message may be legally privileged and confidential under applicable law, and is intended only for the use of the individual or entity named above. If the recipient of this message is not the above-named intended recipient, you are hereby notified that any dissemination, copy or disclosure of this communication is strictly prohibited. If you have received this communication in error, please notify the senders mobile and purge the communication immediately without making any copy or distribution.
De : ***@orange-ftgroup.com [mailto:***@orange-ftgroup.com]
Envoyé : mercredi 23 février 2011 14:49
À : Java
Objet : RE: Dialoge Process
Si je comprends bien votre truc c'est pour pouvoir voir des animations flash dans des navigateurs qui ne supportent pas flash ?
M'enfin quelle idée de ne pas supporter flash ;-)
De : Erik Mazoyer [mailto:***@uni-learning.com]
Envoyé : mercredi 23 février 2011 14:44
À : Java
Objet : RE: Dialoge Process
Merci à tous pour vos réponses.
Quelques précisions :
Pourquoi Flash ? Car notre logiciel produit des animations Flash de formation qui seront regardées par les apprenants sur leur poste à travers leur navigateur. La technologie est vraiment bien dans cette utilisation et permet de produire des cours très design.
Pourquoi shooter du Flash ? Pour permettre d'avoir un Wysiwyg dans notre logiciel.
Pourquoi ne pas utiliser la couche ip ? Car nous avons déjà rencontré des postes dans les entreprises ou la couche ip est bridée (Firwall par exemple). Il faut que notre logiciel fonctionne partout :).
@Damien : J'ai déjà mis en oeuvre une telle architecture sur Linux pour isoler un programme en C++ qui avait des fuites mémoires (mais qu'on avait pas le droit de corriger). Ca fonctionnait très, très bien. Il fonctionne bien en ligne de commande ton programme en C++ qui fait un écho ?
C'est une bonne chose que tu l'ai mis en place. Bon sous Linux, je ne sais pas si sous Windows nous n'avons pas des « particularités » :).
Sinon, oui en ligne de commande ça marche.
@Hervé : Vois peut être http://www.flagstonesoftware.com/transform/index.html
Ça marche pas mal, mais il faut comprendre la structure du format flash.
Nous avons un Flash assez complexe, qui récupère des données, effectue des calculs et produit une visualisation avec gestion des transparences. Bref c'est assez compliqué de changer de techno. Mais je vais regarder Flagstone Software, nous travaillons beaucoup avec Flash et Java et ça semble une passerelle très intéressante.
@Jean-Baptiste (Briaud) : Je ne suis pas sur d'avoir bien compris ce que tu voulais faire, mais une bidouille me viens à l'esprit :
"shooter l'animation" via des captures d'écran avec awt ... ?
Le problème est que Flash n'est pas stable dans le temps. Or l'utilisation de notre outil peu durer une journée complète sans redémarrage. Et la Flash n'est pas stable du tout. De plus quand il plante, il plante gravement et plante la JVM. Impossible de catcher une exception sous C++, c'est plus grave que ça :). En fait il se prend les pieds dans le tapis avec le multi-threading.
@Baptiste : > J'avais bêtement pensé à utiliser les InpuStream et OutputStream du Process lancé par Java. C'est pas bête du tout et ça marche très bien. Preuve en est : jenkins récupère les logs de processus externe exactement comme ça. Nous on le fait ss pb ds différents cas... ... Ptete un pb ds ton code C++ qd même ?
Et ça fonctionnait sous Windows ?
Pour mon code C++, il est tout à fait possible que ça vienne de lui ou des encodages entre Java et C++. A priori j'ai tout mis en Unicode mais je suis sous Windows :).
Mais avant de chercher du coté de C++ je voulais juste savoir si quelqu'un était tombé sur un problème en utilisant cela sous Windows.
@Jean-Baptiste (Defard) : Et pour répondre à ton autre question, non jamais. L'age venant j'évite le saut à l'élastique ;-)
Surtout si l'élastique s'appelle Flash.
C'était surtout sur la communication Java <=> C++ que je te posais la question. Pour Flash nous avons des spécialistes et pas mal d'expériences (parfois douloureuses) depuis que le produit existe (environ 8 ans).
Erik
********************************************************************************
IMPORTANT.Les informations contenues dans ce message electronique y compris les fichiers attaches sont strictement confidentielles
et peuvent etre protegees par la loi.
Ce message electronique est destine exclusivement au(x) destinataire(s) mentionne(s) ci-dessus.
Si vous avez recu ce message par erreur ou s il ne vous est pas destine, veuillez immediatement le signaler a l expediteur et effacer ce message
et tous les fichiers eventuellement attaches.
Toute lecture, exploitation ou transmission des informations contenues dans ce message est interdite.
Tout message electronique est susceptible d alteration.
A ce titre, le Groupe France Telecom decline toute responsabilite notamment s il a ete altere, deforme ou falsifie.
De meme, il appartient au destinataire de s assurer de l absence de tout virus.
IMPORTANT.This e-mail message and any attachments are strictly confidential and may be protected by law. This message is
intended only for the named recipient(s) above.
If you have received this message in error, or are not the named recipient(s), please immediately notify the sender and delete this e-mail message.
Any unauthorized view, usage or disclosure ofthis message is prohibited.
Since e-mail messages may not be reliable, France Telecom Group shall not be liable for any message if modified, changed or falsified.
Additionally the recipient should ensure they are actually virus free.
********************************************************************************