2010-09-13 136 views
1

我有一個java gui的問題,並打開一個文件。我的問題是完整的GUI掛起,直到該文件是開放的,但我已經擰的動作......gui甚至掛着線程

我有這樣的動作監聽:

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"); 
     } 
    }); 

對其執行動作剛剛打開給定的路徑

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(); 
      } 
     } 
    }); 
} 

如果我跑我的節目,我立刻看到控制檯上的「富」,但GUI完全地掛斷和按鈕處於按下狀態... 有沒有人有一個想法,我做錯了什麼?我的其他動作偵聽器的工作原理是相同的,我沒有問題...

回答

2

SwingUtilities.invokeLater()安排在EDT上運行runnable,如javadoc中所述。也許你應該使用SwingWorker來打開文檔?

+0

爲簡單起見,EDT ==事件分派線程== gui線程 – Ishtar 2010-09-13 09:47:21

+0

謝謝,它工作:)我應該將所有invokeLater更改爲SwingWorkers ... – reox 2010-09-13 09:55:17