Java 框架无法关闭 使用某些输入法时



下面是2个简单的java ui应用程序,我发现如果当前输入法是谷歌拼音。当我在Windows 7和Windows XP操作系统中单击此框架的右上角关闭按钮时,框架可以关闭,但EDT线程不会终止

谷歌拼音输入法下载地址为http://dl.google.com/pinyin/v2/GooglePinyinInstaller.exe.

最近我发现在使用百度拼音输入法(另一种中文输入法)时也会出现这种情况。不同的是,它只在随机使用swing时发生(EDT线程在一段时间内不能终止,稍后会变为正常)。

很久以前,我读过一篇文章,指责同样的问题与我相似,但作者也没有拿出解决方案。我以为这是谷歌输入法中的一个错误。

我知道大多数人认为这个问题可能不是中文的,可能无法安装这两个输入法并尝试我的样本,但这对我来说太荒谬了,这两件事怎么会有关系???根据你的知识,有人想解释一下吗?我会非常感激的

// 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
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),结果是我无法关闭框架,当我单击关闭按钮时,什么都没有发生。

您应该尝试使用出口侦听器,例如:

this.addWindowListener(new MyExitListener());

出口监听器类:

public class MyExitListener extends WindowAdapter {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}

这是我通常做的事情,而且总是有效的。

最新更新