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

Java 如何在JFrame出口上运行terminate命令?,java,multithreading,swing,Java,Multithreading,Swing,我知道尝试编写终止线程的代码背后的基本原理,但我遇到了一点问题 我在JFrame GUI中有一个JButton,它启动了我试图制作动画的模拟。它在JButton的ActionPerformed代码中由 new AnswerWorker().execute(); AnswerWorker类反过来扩展SwingWorker,以便在GUI仍处于活动状态时绘制动画帧 public class AnswerWorker extends SwingWorker<String, Integer>

我知道尝试编写终止线程的代码背后的基本原理,但我遇到了一点问题

我在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();
    }

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

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

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

  • 添加到JFrame,从
    windowClosing
    事件,您必须调用
    JFrame.setVisible(false)
    ,然后调用
    SwingWorker

  • SwingWorker
    结束终止当前JVM后,如果出现任何异常,则显示
    JOptionPane
    ,或者再次将JFrame显示回屏幕,需要更改
    DefaultCloseOperation,以隐藏关闭时的操作


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

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

我怎么称呼SwingWorker?我是调用实例InputGUI.AnswerWorker,还是直接引用SwingWorker?终止或中断该线程的语法是什么?@Martin这是一个问答网站,你似乎需要一位导师。投票以“太宽”结束。在dispose(){它告诉我“声明无效;返回类型必需”。有什么想法吗?我试过了,但现在它声称您不能在awt中重写dispose。Window,正如它所说的“尝试分配较弱的访问权限是公共的”public void dispose()一样;d在构造函数上,您需要调用方法JFrame.setDefaultCloseOperation(DISPOSE_on_CLOSE)啊,谢谢!最后,它说“找不到符号:方法stopThread”。如何引用正确的线程并终止它?
@Override
dispose(){
   stopThread();
   super.dispose();
}