GUI程序关闭按钮不起作用 我写了个GUI的程序。在程序运行的时候(比如点击某个按钮,程序做一些写文件操作),点击关闭按钮不起作用了,只能到任务管理器强制关闭。大家知道是为什么吗?程序不运行(比如没开始写文件)的时候是可以关闭的。怎么才可以在程序运行的时候关闭呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 感觉你在创建frame的时候少写了一个语句但是我现在在公司,以前做的那些例子没带。构造器里面加上 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);试一试 “读文件”这个操作是不是通过界面控件触发的?不要在控件的 listener 方法里直接读,建立一个 SwingWorker 然后 execute() ,在它的 doInBackground() 里读。 SwingUtilities.invokeLater(new Runnable() { @Override public void run() { doSomething(); } }); 你说得对,我是在listener里面写的。那个 SwingWorker的execute在哪里触发? 把文件操作写在doinbackground里面,在listener里面写new Task().execute()即可private class Task extends SwingWorker<Void, Void>{ @Override protected Void doInBackground() throws Exception { //write file return null; }} 不用推测了,只能是这个原因。把写文件操作放入单独线程后,仍然要注意几个细节问题:1、该线程如果是常规线程(非守护线程),即便主线程关闭GUI界面消失,程序也不会实际结束;程序会一直等到文件写入完毕才真的结束;2、如果1这种情况下,写文件线程因为其他原因被阻塞了(比如等待某对象的notify啥的),那么这个程序就永远不结束了;3、如果该线程是守护线程,那么主线程关闭就会强制结束程序,但这可能导致你得到一个损坏的文件。 缺省创建的就是常规线程,守护线程要:setDaemon(true); 新手求助线程输出 这段代码说 数组下标越界 sun官网换了,怎么下java源码? Java里面有没有类似.net里webrequest的类呀? 我的线程为什么不能同步,我是按书上打的呀.谢谢大家了. 字符串你全懂了吗? 请教高手指点类的问题 谢谢!!! 如何对指定的树节点进行着色啊? 请问谁有关于义务兵逃跑的法律文件!急急急!!!(慎重提示:不是灌水!) 谁用java做过gis?急死我了呀 java1.7.0_09环境变量设置后能显示java 命令但是找不到javac命令 配置Tomcat出错,这是什么原因?
但是我现在在公司,以前做的那些例子没带。
构造器里面加上
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
试一试
“读文件”这个操作是不是通过界面控件触发的?
不要在控件的 listener 方法里直接读,建立一个 SwingWorker 然后 execute() ,在它的 doInBackground() 里读。
@Override
public void run() {
doSomething();
}
});
protected Void doInBackground() throws Exception {
//write file
return null;
}
}
不用推测了,只能是这个原因。
把写文件操作放入单独线程后,仍然要注意几个细节问题:
1、该线程如果是常规线程(非守护线程),即便主线程关闭GUI界面消失,程序也不会实际结束;程序会一直等到文件写入完毕才真的结束;
2、如果1这种情况下,写文件线程因为其他原因被阻塞了(比如等待某对象的notify啥的),那么这个程序就永远不结束了;
3、如果该线程是守护线程,那么主线程关闭就会强制结束程序,但这可能导致你得到一个损坏的文件。
缺省创建的就是常规线程,守护线程要:setDaemon(true);