如何在JFrame出口上运行terminate命令?

时间:2014-01-14 10:49:51

标签: java multithreading swing

我知道尝试编写终止线程的代码背后的基础知识,但我遇到了一些问题。

我在JFrame GUI中有一个JButton,用于启动我正在尝试设置动画的模拟。它在JButton的ActionPerformed代码中被调用

new AnswerWorker().execute();

AnswerWorker类反过来扩展了SwingWorker,以便在GUI仍处于活动状态时绘制动画帧。

public class AnswerWorker extends SwingWorker<String, Integer> {
    protected String doInBackground() throws Exception
    {
        Threading threading = new Threading();
    return null;
    }
protected void done()
{
try {
    JOptionPane.showMessageDialog(InputGUI.this, AMEC.unsuccesfulpercentage + "% of iterations had trucks that had to sleep over");
    AMEC.unsuccesfulpercentage = 0;
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

}

}

为了创建一种停止模拟线程的方法,我创建了Threading类,它调用运行模拟的函数。

public class Threading extends Thread {

    @Override
    public void run() {
        while (!Thread.currentThread().isInterrupted()) {
    try {
        AMEC.runsimulation();
    } catch (IOException ex) {
        Logger.getLogger(InputGUI.class.getName()).log(Level.SEVERE, null, ex);
    } catch (InterruptedException ex) {
        Logger.getLogger(InputGUI.class.getName()).log(Level.SEVERE, null, ex);
    }
        }
    return;
    }
}

现在,在runsimulation()函数中,我初始化一个JFrame,如果通过单击其关闭按钮关闭JFrame,我想终止运行模拟的线程。我该怎么做?

编辑:所有上述代码都在包含我所有GUI元素的文件InputGUI.java中调用。运行模拟函数位于我的主项目文件AMEC.java

2 个答案:

答案 0 :(得分:1)

  

如何在JFrame exit上运行terminate命令?

  • WindowListener添加到JFrame,windowClosing事件,您必须致电JFrame.setVisible(false),然后致电SwingWorker

  • SwingWorker结束后终止当前JVM,在出现任何异常的情况下显示JOptionPane,或者再次将JFrame显示回屏幕,需要更改DefaultCloseOperation, to HIDE_ON_CLOSE }

答案 1 :(得分:1)

您可以覆盖JFrame上的dispose()方法以包含停止线程的调用

@Override
dispose(){
   stopThread();
   super.dispose();
}