Bonjour,
Ceci étant mon premier post sur ce forum, je vais en profiter pour faire une rapide présentation. C'est vraiment pas mon fort, alors je vais faire court
Je suis étudiant en informatique, actuellement en stage afin de valider mon DUT, et pense continuer mes études dans une école d'ingénieur.
Dans le cadre de mon stage, je dois développer une application qui gère l'affichage de fichier swf sur plusieurs écrans. En principe, l'application va chercher un XML contenu dans une base de donnée, et récupère les <pile> à l'intérieur de celui ci.
Toutes les <pile> contenues dans le xml sont affichable grâce à un swf, à qui il suffit de passer en paramètre le numéro de la pile. ( ici [...]/le_fichier_swf.swf?[...]&pileParam=0 affichera donc _44020497_sat_flood416x260.jpg )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 <Pile> <ScreenG>03</ScreenG> <ScreenD>00</ScreenD> <Time>00:00:02</Time> <Sound></Sound> <Border>00</Border> <Link>00</Link> <MosNb>01</MosNb> <PileCartelAuto>1</PileCartelAuto> <PileCartelLine1></PileCartelLine1> <PileCartelLine2></PileCartelLine2> <PileCartelLine3></PileCartelLine3> <PileCartelLine4></PileCartelLine4> <PileCartelLine5></PileCartelLine5> <PileDescr></PileDescr> <Subtitle></Subtitle> <TransType>-1</TransType> <TransTime>0</TransTime> <KnowMore> </KnowMore> <ImgElement> <FakirID></FakirID> <Type>if</Type> <Img>_44020497_sat_flood416x260.jpg</Img> <ThumbImg></ThumbImg> <Txt></Txt> <Cropped>00</Cropped> <CropX>00</CropX> <CropY>00</CropY> <X>-1</X> <Y>-1</Y> <TCin></TCin> <TCout></TCout> </ImgElement> </Pile>
J'utilise actuellement la version trial de JFlashPanel afin d'afficher ces swf. J'me suis rapidement penché sur JSwiff, mais ai rapidement abandonné, trouvant les FlashPanel plus intuitifs.
Voici l'objet qui représente un de mes écrans :
J'ai aussi un objet Displayer, qui lui appelera la méthode display(...) de Screen. Je vous épargne la lecture de son constructeur, qui ne fais qu'initialiser les différents Screen à la bonne place.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 public class Screen extends JWindow { private FlashPanel flash ; public Screen(int x, int y, int width, int height, GraphicsConfiguration gConfig ) { // create window and size it super(gConfig); setLocation(x, y); setPreferredSize(new Dimension(width, height)); getRootPane().setBorder(new LineBorder(Color.black)); flash=null ; // display screen pack(); setVisible(true); } public void display(String flashURL, String paramSwf){ // destroy current flashPanel if( flash!=null ){ remove(flash); flash.dispose(); } try { // create the new flashPanel flash = new FlashPanel(new URL(flashURL), true); } catch (MalformedURLException ex) { Logger.getLogger(Screen.class.getName()).log(Level.SEVERE, null, ex); } catch (JFlashLibraryLoadFailedException ex) { Logger.getLogger(Screen.class.getName()).log(Level.SEVERE, null, ex); } catch (JFlashInvalidFlashException ex) { Logger.getLogger(Screen.class.getName()).log(Level.SEVERE, null, ex); } flash.setMenuDisplay(false); flash.setBackground(Color.gray); // set flash parameters flash.setVariables(paramSwf); add(flash); flash.setVisible(true); validate(); } }
Et c'est ici que le hic apparait.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 public class Displayer { public final static String swfIF = "Le_chemin_du_swf_pour_les_images_fixes", swfIA = "Le_chemin_du_swf_pour_les_images_animées"; private SwfParam[] pileParam ;// les paramètres swf correspondant à la pile private String paramSWF ; // des paramètres nécessaire au swf, donné comme argument de l'application private HashMap<String, Screen> allScreenByType ; // tous mes screens public void startDisplay() throws InterruptedException{ // display pile contents for( int i=0; i<pileParam.length; i++){ // get the screen where swf must be displayed int nb = pileParam[i].getScreenNumber(); String key = null ; if( "MDS Screen 1".contains(""+nb) ){ key = "MDS Screen 1"; } else if( "MDS Screen 2".contains(""+nb) ){ key = "MDS Screen 2"; } else if( "MDS Screen 3".contains(""+nb) ){ key = "MDS Screen 3"; } else if( "MDS Screen 4".contains(""+nb) ){ key = "MDS Screen 4"; } if( key==null) System.err.println("Displayer.startDisplay() ==> key null"); // load the swf in Screen if( pileParam[i].getType().equals("if") ) allScreenByType.get(key).display(swfIF, paramSWF+"&pileParam="+i) ; else if( pileParam[i].getType().equals("ia") ) System.err.println("VIDEO => Not yet implemented"); // wait System.out.println("pile"+i+" ::time="+pileParam[i].getTime()); Thread.sleep(pileParam[i].getTime()*1000); } } }
En effet, l'appel à la méthode Screen.display(...) ne beug absolument pas, mais si je réalise 4 appel consécutif, sur 4 screen différents, seulement 3 images s'afficheront ! ( Je tiens à préciser que les 4 images peuvent toutes s'afficher, mais pas simultanément... )
De plus, si j'utilise la méthode startDisplay(), bien souvent la première image s'affichera, mais les suivantes refuserons d'apparaitre
Etant sur le problème depuis presque une semaine, je commence à saturer et avoir besoin de l'aide de personne plus compétente que moi...
J'ai donc 2 petites questions :
- La première peut se résumer par : " C'est quoi s'te délire ? Pourquoi ça me fais jamais 2 fois la même chose quand je lance l'application ? Pourquoi un coup y en a un qui charge, le coup d'après c'est un autre, mais jamais les deux ? "
- La deuxième est un peu plus hors sujet, mais est il possible d'afficher des swf qui eux même sont des lecteurs de flv ? Et tant que j'y suis, connaissez vous des lecteurs flv ( toujours en flash ) sans aucune interface ?
J'ai bien conscience que mes explications sont un peu fouillis ( la pédagogie et la communication c'est pas mon fort), je répondrais à toutes vos questions si j'ai oublié d'expliciter quelques points.
Merci beaucoup pour la lecture, en espérant qu'il se cache parmis vous quelqu'un qui me sauvera, et désolé pour mon orthographe qui laisse parfois à désirer
NiZiL
Partager