日期:2014-05-20  浏览次数:20696 次

GUI程序关闭按钮不起作用
我写了个GUI的程序。在程序运行的时候(比如点击某个按钮,程序做一些写文件操作),点击关闭按钮不起作用了,只能到任务管理器强制关闭。大家知道是为什么吗?程序不运行(比如没开始写文件)的时候是可以关闭的。怎么才可以在程序运行的时候关闭呢?
------解决方案--------------------
你试试把写文件的操作放在单独的线程中试试。或许是写文件在主线程,导致主线程等待阻塞。
------解决方案--------------------
引用:
感觉你在创建frame的时候少写了一个语句。。。
但是我现在在公司,以前做的那些例子没带。
构造器里面加上
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
试一试


人家没写文件之前是可以关闭的,说明加了这句话。我也觉得是阻塞的问题
------解决方案--------------------
引用:
引用:引用:感觉你在创建frame的时候少写了一个语句。。。
但是我现在在公司,以前做的那些例子没带。
构造器里面加上
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
试一试

人家没写文件之前是可以关闭的,说明加了这句话。我也觉得……


“读文件”这个操作是不是通过界面控件触发的?
不要在控件的 listener 方法里直接读,建立一个 SwingWorker 然后 execute() ,在它的 doInBackground() 里读。
------解决方案--------------------
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
doSomething();
}
});

------解决方案--------------------
引用:
引用:引用:
引用:引用:感觉你在创建frame的时候少写了一个语句。。。
但是我现在在公司,以前做的那些例子没带。
构造器里面加上
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CL……

把文件操作写在doinbackground里面,在listener里面写new Task().execute()即可

private class Task extends SwingWorker<Void, Void>{

@Override
protected Void doInBackground() throws Exception {

//write file 
return null;
}
}