Salut !

Je rencontre un petit problème lors de tentative d'impression en Java, et je me posais une question sur l'EDT.

J'ai créé un bouton "Imprimer" et lorsque j'appuie sur celui-ci, je lance une méthode dans l'ActionListener associé au bouton.
Je me crées alors un PrinterJob, tout ça tout ça, et j'ai mis l'appel aux méthodes printJob.setPrintable() et printJob.print() dans un Thread.

Sauf que souci, j'ai parfois ce qui ressemble à un interblocage : l'appli tourne en rond, IHM grise, plus de réponse.

Est-ce dû au fait que j'appelle printJob.print() dans un Thread lui-même dans l'EDT ?

Petit bout de code :
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
 
   printMenuItem.addActionListener( new ActionListener(){
      public void actionPerformed(ActionEvent ae){
         bPrint_actionPerformed(ae);
      }
   });
 
 
   public void bPrint_actionPerformed(ActionEvent ae){
      [...]
      final PrinterJob printJob = PrinterJob.getPrinterJob();
      printJob.setJobName(srcFrame.getTitle());
      boolean b = printJob.printDialog();
      if (b) {
         PageFormat defaultFormat = printJob.defaultPage();
         final PageFormat pf = printJob.pageDialog(defaultFormat);
 
         // test permettant de savoir si l'utilisateur a appuyé sur le bouton "Annuler"
         if (!pf.equals(defaultFormat)){
            [...]
            progressBar = MyProgressBar.getInstance();					
            progressBar.show(true);
            [...]
 
            Thread runner = new Thread(){
               public void run(){
               printJob.setPrintable(myApp, pf);
 
               try {
                  System.out.println("***** Début print() *****");
                  printJob.print();
               } catch (Exception ex) {
                  ex.printStackTrace();
               }
 
               setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
               progressBar.dispose();
 
               System.out.println("***** Fin print() *****");
            }
         };
 
         runner.start();
      }
   }
}
J'ai bien "***** Début print() *****" qui s'affiche, mais après, blackout, ça bouge plus...

Merci d'avance pour tout éclaircissement...