2014-01-12 87 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