【问题标题】:Java SwingWorker locks up GUIJava SwingWorker 锁定 GUI
【发布时间】:2012-11-14 03:26:16
【问题描述】:

我有以下代码...

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 的全部意义就在于不会发生这种情况。

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

-科迪

【问题讨论】:

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


    【解决方案1】:

    你应该调用SwingWorker#execute来启动worker,而不是run

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 使用“添加 cmets”回复某人,他们会收到通知。我建议删除这个“答案”。
      • @Tinman 声誉低于 50 分的用户无法在任何地方发布 cmets,但答案(甚至是相当新的蜜蜂)是正确的
      • @mKorbel 那么他就有动力获得更高的代表:)
      • 认真的人吗?我自己想出了答案,并决定分享它而不是把问题记下来。就我个人而言,我可以给老鼠背后的代表...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      相关资源
      最近更新 更多