2014-01-12 86 views
1

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

+0

有任何数量的可能的原因JVM可能不会终止窗口关闭。例如,有可能还有其他非守护线程正在运行。您可以尝试添加System.exit以查看是否强制它终止 – MadProgrammer

+0

为了更好地帮助您,请发布[MCVE](http://stackoverflow.com/help/mcve)。 –

回答

0

你应该尝试使用退出监听器,例如:

this.addWindowListener(new MyExitListener()); 

和出口监听器类:

public class MyExitListener extends WindowAdapter { 

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

这是我平时做,它总是有效。

+0

并且不要忘记进口。祝你好运!!! – TJR