Java SwingWorker锁定GUI

Java SwingWorker锁定GUI,java,multithreading,swing,swingworker,event-dispatch-thread,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, V

我有以下代码

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

    }
});
runNow.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件arg0){
最终搜索s=(搜索)node.getUserObject();
//摇摆工人
SwingWorker worker=新SwingWorker(){
@凌驾
公共无效doInBackground(){
s、 run();
返回null;
}
@凌驾
公众假期结束(){
updateResultsPanel(s.getResults(),s.getName());
}
};
worker.run();
}
});
这是一个弹出菜单操作,它应该创建一个新的SwingWorker,释放GUI,做一些工作,然后更新窗口的结果。但是,现在当我单击菜单项时,GUI会被锁定,直到工作完成,这让人感到困惑,使用SwingWorker的全部意义在于这样就不会发生

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


-Cody

必须将方法
SwingWorker.run()
更改为
SwingWorker.execute()
,它工作得很好。

您应该调用启动工作程序,而不是
run


Run由
Runnable
接口公开,但execute实际上会安排worker在将来某个时间运行。

使用“添加注释”回复某人,他们会收到通知。我建议删除这个“答案”。@声誉低于50分的Tinman用户不能到处发表评论,但答案是(甚至是新手…)correct@mKorbel然后他有动力获得更高的声誉:)真的吗?我自己想出了答案,并决定与大家分享,而不是把问题记下来。就我个人而言,我可以给一只老鼠一个关于。。。