Bonsoir, voici le problème que je rencontre :
j'utilise une classe JAVA qui génère des bitmaps, via une Dll codé en delphi et qui utilise JNI.
J'ai implémenté directement dans cette classe un progressMonitor qui indique le nombre de fichier créé. Lorsque j'appelle cette classe, tout se passe bien mon ProgressMonitor est bien rafraichi.
Dans un deuxième temps j'ai fait une appli en java, qui utilise utilise directement la classe de génération des fichiers, seulement mon ProgressMonitor n'est jamais rafraichit. En recherchant sur le net j'ai trouvé qu'il s'agissait d'un problème lié à l'EDT. Pour résoudre ce problème, il semble que je soit obligé de gérer ça avec des threads.
D'où les questions suivantes:
je dois créer un thread pour la génération + un autre pour le progressmonitor?
je peux tout réunir au sein d'un même thread?
Voici une partie du code :
PageGenerator est le nom de la classe que j'utilise pour générer les images, contenu dans un jar.
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 /*classe MainForm de l'appli JAVA utilisant la classe de génération*/ public static void main(String args[]) { /* int nbArg = args.length ; for (int i=0;i < nbArg ;i++) { System.out.println(args[i]); }*/ java.awt.EventQueue.invokeLater(new Runnable() { //@Override public void run() { new MainForm().setVisible(true); } }); /*après ouverture du fichier contenant les info*/ private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { final JFileChooser jfc = new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter( "xml", "xml"); jfc.setCurrentDirectory( new File("C:\\JAVA\\Projet\\SubConvert\\SVN\\trunk\\Result\\img")); jfc.setFileFilter( filter); if (jfc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { monFichier = jfc.getSelectedFile().getAbsolutePath(); LireFichier(); PageGenerator.generatePage(fichierContenu); } }
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 /*classe de génération des images*/ public static int generatePage (String text) { java.awt.Frame frame = new java.awt.Frame(); frame.setUndecorated(true); frame.setLocationRelativeTo(null); frame.setVisible(true); int result = generatePage(text,frame); frame.setVisible(false); frame.dispose(); return result; } public static int generatePage (String text, java.awt.Component parent) { try { ProgressMonitor monitor = new ProgressMonitor (parent, new String ("Image Rendering in progress"), new String ("Parsing Data"), 0,100); monitor.setMillisToDecideToPopup(5); monitor.setMillisToPopup(5); ... ... ... monitor.setNote (new String ("Generating image " + (count +1) + " of " + nb_clips)); monitor.setProgress (count); if (monitor.isCanceled ()) return -1;
Question supplémentaire, j'ai essayé de créer le progressmonitor dans la class mainform, et je le passe en paramètre à la fonction pagegenerator, mais dans ce cas impossible de compiler.
Merci d'avance, si vous avez une bonne idée à me fournir.
Cdlt
JT
Partager