如何解决Java GUI线程未关闭
我有一个包含 GUI (Swing) 的应用程序插件,并作为线程启动。 GUI 启动一个线程,该线程对按钮事件进行一些处理,在处理完自身后立即执行。在处理过程中,对话窗口起到记录器的作用。一切正常,在处理完成后调用 window.dispose()
时,GUI 和对话窗口将关闭并且线程终止。
线程是作为线程启动的,而不是通过 SwingUtilities 启动的(我尝试了很多次,但我就是无法让它工作)。
基本上是应用的入口类:
public void calledByApplication(){
RunnableClass.startGui(this);
}
public void doStuff(){ //GUI actually gets created here
gui.setVisible(true);
}
public void calledWhenSaveButtonPressed(){
//Process some stuff
gui.dispose(); //works,thread terminates
}
RunnableClass(实现 Runnable):
ApplicationEntryClass aec;
public RunnableClass(ApplicationEntryClass aec){
this.aec = aec;
}
public void run(){
aec.doStuff();
}
public static void startGui(ApplicationEntryClass aec){
Thread guiThread = new Thread(new RunnableClass(aec));
guiThread.start();
}
Gui 类:
public void calledWhenSaveButtonPressed(){
aec.calledWhenSaveButtonPressed();
}
public void calledWhenCancelButtonPressed(){
this.dispose(); //doesn't work
}
我的问题:
当尝试通过按钮事件(或带有 JFrame.DISPOSE_ON_CLOSE
的 x)处理 GUI 时,它会关闭,但线程不会终止。查看堆栈后,我注意到 EventDispatchThread 卡在 EventDispatchThread.pumpEventForFilter(...)
上。
我很清楚,问题可能是线程不会自动销毁。但由于我是线程的新手,我真的不知道从哪里开始故障排除。有什么建议吗?
编辑:对话窗口不是问题。另外,我不能使用 System.exit()
否则调用插件的应用程序将终止。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。