下面是2个简单的java ui应用程序,我发现如果当前的IME是google pinyin当我在Windows 7和Windows XP OS中单击此Frame的右上关闭按钮时,框架可以关闭,但EDT线程不会终止。Java Frame无法关闭使用某些输入法时
谷歌拼音输入法下载地址是http://dl.google.com/pinyin/v2/GooglePinyinInstaller.exe。
最近我发现使用百度拼音输入法(另一种中文输入法)时也会出现这种情况。不同的是,它仅在使用挥杆时发生,随机(EDT线程不能终止一段时间,并在以后变得正常)。
我读过一篇文章,指责类似于我很久以前的相同问题,作者也没有提出解决方案。我认为这是Google IME中的一个错误。
我知道大多数人认为这个问题可能不是中文,可能无法安装这2个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);
}
});
下面是作为@MadProgrammer提到摇摆
// 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);
}
});
。我更改了我的代码,使用AWT中的System.exit(0)和swing中的frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE),结果为我无法关闭框架,当我单击关闭按钮时,什么也没有发生。
有任何数量的可能的原因JVM可能不会终止窗口关闭。例如,有可能还有其他非守护线程正在运行。您可以尝试添加System.exit以查看是否强制它终止 – MadProgrammer
为了更好地帮助您,请发布[MCVE](http://stackoverflow.com/help/mcve)。 –