2016-05-07 78 views
1

我有一個GUI Java應用程序。該應用最小化到系統托盤。當點擊托盤圖標時,我放置了一個frame.requestFocusInWindow(),以便恢復的JFrame可以獲得用戶的關注。.requestFocusInWindow()在構建jar時不起作用

代碼如下。

trayicon.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseClicked(MouseEvent e) { 
      try { 
       if (e.getButton()==MouseEvent.BUTTON1) frame.setVisible(true); 
       frame.requestFocusInWindow(); 
      } catch (Exception ex) { 
       Logger.getLogger(TrayControl.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
}); 

這工作完全,如果我在NetBeans IDE中執行應用程序,但是當我建立.jar文件並執行它,不似是工作.requestFocusInWindow(),因爲應用程序窗口沒有獲得用戶的關注並在我打開的其他窗口後面恢復。那麼這裏發生了什麼?

+0

你可以嘗試包裹requestFocusInWindow方法在SwingUtilities.invokeLater(...)。或者,可以嘗試對已添加到框架的組件使用'grabFocus()'方法。 – camickr

+0

謝謝!但是不工作,'JFrame'不顯示在其他窗口前面。我認爲問題不是焦點,而是窗口狀態。單擊最小化按鈕時,「JFrame」從屏幕隱藏到系統托盤圖標,可能問題在於,單擊托盤圖標時,「JFrame」顯示爲「frame.setVisible(true)」,但仍然最小化... 可? – FiroKun

回答

0

問題解決了。我用.setExtendedState() metoth的JFrameMouseListener如下:

trayicon.addMouseListener(new MouseAdapter() { 
    @Override 
    public void mouseClicked(MouseEvent e) { 
     try { 
      frame.setExtendedState(JFrame.NORMAL); 
      frame.setVisible(true); 
     } catch (Exception ex) { 
      Logger.getLogger(TrayControl.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
});