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

时间:2014-01-12 20:27:35

标签: java swing awt

下面是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)更改了我的代码,结果是我无法关闭框架,当我单击关闭按钮时什么都没发生。

1 个答案:

答案 0 :(得分:0)

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

this.addWindowListener(new MyExitListener());

退出监听器类:

public class MyExitListener extends WindowAdapter {

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

这就是我通常所做的事情,它始终有效。