2010-09-13 6 views
1

J'ai un problème avec un Java Java et l'ouverture d'un document. Mon problème est le complet est suspendu jusqu'à ce que IUG le document est ouvert, mais je l'ai déjà enfilé l'action ...gui se bloque même avec le fil

Je cet écouteur d'action:

this.EditButton.addActionListener(new ActionListener(){ 
     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      String path = (String)DocumentsTable.getValueAt(DocumentsTable.getSelectedRow(), 2); 
      openDocument(path); 
      System.out.println("foo"); 
     } 
    }); 

l'action qui est effectuée juste ouvre le chemin donné

private void openDocument(final String path){ 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      try{ 
       Desktop.getDesktop().open(new File(path)); 
      } 
      catch(Exception e){ 
       JOptionPane.showMessageDialog(null, "Das Dokument konnte nicht geöffnet werden...\n"+e.toString()); 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

Si je lance mon programme, je vois tout de suite « foo » sur la console, mais l'interface se bloque complètement et le bouton est dans l'état pressé ... est-ce que quelqu'un a une idée de ce que je fait de mal? Mes autres écouteurs d'action fonctionnent de la même manière et je n'ai pas le problème là-bas ...

Répondre

2

SwingUtilities.invokeLater()SwingUtilities.invokeLater()SwingUtilities.invokeLater() planifie le runnable à exécuter sur l'EDT, comme indiqué dans le javadoc. Peut-être que vous devriez utiliser un SwingWorker pour ouvrir le document?

+0

Pour la simplicité, EDT == Fil d'expédition d'événement == fil gui – Ishtar

+0

merci, cela a fonctionné :) mh je devrais changer tout invokePlus tard à SwingWorkers ... – reox