2016-05-07 46 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); 
     } 
    } 
});