问题描述
我有一个包含 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 (将#修改为@)