如何在执行一个操作时执行另一个操作?

时间:2015-01-08 05:42:06

标签: java swing actionlistener

我的gui课程延伸JFrame。 GUI包含两个JButton说(start_button和view_button)。

  JButton start_button;
  JButton view_button;

按下start_button后要执行的操作需要一些时间(范围从2分钟到5分钟)。

  start_button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            //...
            //action executing. May take 2 to 5 min to complete.
        }
  });

在执行此操作时,我希望在TextPane内的单独JDialogue中查看此操作的状态日志。通过按JDialogue可以看到此view_button

   view_button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            myJDialogue.setVisible(true);
        }
   });

但是,除非start_button执行的操作完成,否则我无法访问任何gui组件。因此,我无法通过按view_button来查看实时状态日志。 如何在一个动作运行时这样做?请帮忙。感谢。

1 个答案:

答案 0 :(得分:2)

您需要在单独的Thread中执行长时间运行的任务,这样您就不会阻止GUI响应事件。

阅读Concurrency上Swing教程中的部分以获取更多信息。也许SwingWorker是最简单的方法,因为它为您创建线程并在线程完成时通知您,以便您可以更新GUI。