下面是2个简单的java ui应用程序,我发现当前的IME是google拼音当我在Windows 7和Windows XP操作系统中单击此Frame的右上方关闭按钮时,框架可以关闭但是EDT线程不会终止。
google拼音IME下载地址为http://dl.google.com/pinyin/v2/GooglePinyinInstaller.exe。
最近我发现使用百度拼音输入法(另一种中文输入法)时也会出现这种情况。不同的是,只有在使用swing,随机(EDT线程无法终止一段时间,以后变得正常)时才会出现。
我读过一篇文章,指责类似于我很久以前的问题,而且作者也没有提出解决方案。我认为这是Google IME中的一个错误。
我知道大多数人认为这个问题可能不是中文,可能无法安装这两个IME并尝试我的样本,但这对我来说太荒谬了,这两件事怎么会有关系?有没有人有想法根据你的知识来解释它?我非常感激!
// AWT
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
final Frame frame = new Frame("test");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
frame.dispose();
}
});
frame.setSize(400, 400);
frame.setVisible(true);
}
});
下面是Swing
// Swing
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("swing");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setSize(400, 400);
frame.setVisible(true);
}
});
正如@MadProgrammer所说。我在AWT中使用System.exit(0)并在swing中使用frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)更改了我的代码,结果是我无法关闭框架,当我单击关闭按钮时什么都没发生。
答案 0 :(得分:0)
您应该尝试使用退出侦听器,例如:
this.addWindowListener(new MyExitListener());
退出监听器类:
public class MyExitListener extends WindowAdapter {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
这就是我通常所做的事情,它始终有效。