更新SwingWorker内部或外部的按钮?

时间:2014-04-13 12:03:30

标签: java swing swingworker

我希望在SwingWorker线程运行时禁用GUI的多个按钮/菜单项。单击按钮时会启动该线程。

我的代码中的while循环看起来会导致CPU负载显着增加。我是否对如何确定SwingWorker线程是否仍在运行有误?

当我更新SwingWorker线程中的按钮/菜单项时,CPU负载肯定会降低。但是,我觉得这不应该是SwingWorker线程的工作。应该吗?

JButton button = new JButton("Start");
button.addActionListener(new ActionListener() {
  @Override
  public void actionPerformed(ActionEvent evt) {
    Thread t = new Thread(new Runnable() {
      @Override
      public void run() {
        menu.setEnabled(false);

        MySwingWorker worker = new MySwingWorker();
        worker.execute();

        while (true) {
          if (worker.isCancelled() || worker.isDone()) {
            menu.setEnabled(true);
            break;
          }
        }
      }
    });
    t.start();
  }
});

1 个答案:

答案 0 :(得分:1)

应在event dispatch thread(EDT)上构建和操作Swing GUI对象 。从t执行此操作不正确。如引用的示例here所示,在开始worker之前,在EDT 上调整您的GIU元素,并在process()done()中更新GUI