2

我有以下代码...

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 的重点是不会发生这种情况。

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

-科迪

4

2 回答 2

4

你应该打电话SwingWorker#execute来启动工人,而不是run

Run 是由接口暴露出来的Runnable,但 execute 实际上是调度 worker 在未来的某个时间运行。

于 2012-11-14T03:31:24.793 回答
1

必须改变方法SwingWorker.run()SwingWorker.execute()它就像一个魅力。

于 2012-11-14T03:31:10.293 回答