Java SwingWorker锁定了GUI

时间:2012-11-14 03:26:16

标签: java multithreading swing swingworker event-dispatch-thread

我有以下代码......

runNow.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {

    final Search s = (Search) node.getUserObject();

    // Swing worker
    SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
        @Override
        public Void doInBackground() {
            s.run();
            return null;
        }

        @Override
        public void done() {
            window.updateResultsPanel(s.getResults(), s.getName());
         }
    };

    worker.run();

    }
});

这是一个弹出菜单操作,它应该创建一个新的SwingWorker,释放GUI,做一些工作,然后更新窗口的结果。但是,现在当我单击菜单项时,GUI会被锁定,直到工作完成,这是令人困惑的,使用SwingWorker的重点是不会发生。

任何关于我做错事的想法都将不胜感激。

-Cody

2 个答案:

答案 0 :(得分:4)

您应该致电SwingWorker#execute来启动工作人员,而不是run

运行由Runnable接口公开,但执行实际上会安排工作人员在将来的某个时间运行。

答案 1 :(得分:1)

必须将方法SwingWorker.run()更改为SwingWorker.execute(),它就像魅力一样。