即使有线程,gui也会挂起

时间:2010-09-13 09:32:40

标签: java multithreading user-interface

我遇到了java 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();
            }
        }
    });
}

如果我运行我的程序,我会立即在控制台上看到“foo”,但gui完全挂断,按钮处于按下状态...... 有谁知道我做错了什么?我的其他动作听众也一样,我没有那个问题......

1 个答案:

答案 0 :(得分:2)

SwingUtilities.invokeLater()计划在EDT上运行runnable,如javadoc中所述。也许您应该使用SwingWorker打开文档?