2011-04-12 56 views
0

全部。 我希望尽量减少我的setExtendedState(JFrame.ICONIFIED)JFrame的,在大多数情况下,它工作正常,但是当它当我锁我的操作系统(Windows XP)不起作用屏幕WIN + L.My遮代码如下所示:为什么在Windows屏幕锁定时setExtendedState(JFrame.ICONIFIED)不起作用?

import javax.swing.JDialog; 
import javax.swing.JFrame; 

public class FrameTest extends JFrame { 
    public static FrameTest ft = new FrameTest(); 

    public static void main(String[] args) 
    { 
     FrameTest.ft.setVisible(true); 
     FrameTest.ft.setLocation(300, 300); 
     try { 
      Thread.sleep(3000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     JDialog dlg = new JDialog(ft, "xxx", true); 
     ft.setExtendedState(JFrame.ICONIFIED); 
     dlg.setVisible(true);//if not have this line, it works also in screen lock case 
    } 
} 

任何帮助将不胜感激。

+0

是否术语“采摘锁”有什么意义吗?这就是你的代码似乎正在尝试。 – 2011-04-12 02:57:37

+0

系统屏幕自动锁定。我只想知道为什么父框架显示正常,但系统屏幕锁定后没有最小化。任何特别的建议? – 2011-04-12 07:27:42

回答

0

难道我说,你是从主线程,而不是在事件指派线程操纵Swing组件。尝试包裹的main的内容:

public static void main(String[] args) 
{ 
SwingUtilities.invokeLater(new Rennable() { 
    @Override 
    void run() { 
     FrameTest.ft.setVisible(true); 
     FrameTest.ft.setLocation(300, 300); 
    } 
    try { 
     Thread.sleep(3000); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    SwingUtilities.invokeLater(new Rennable() { 
     @Override 
     void run() { 
      JDialog dlg = new JDialog(ft, "xxx", true); 
      ft.setExtendedState(JFrame.ICONIFIED); 
      dlg.setVisible(true);case 
    } 
} 

如果没有帮助,请尝试第二invokeLater块分成:

SwingUtilities.invokeLater(new Rennable() { 
     @Override 
     void run() { 
      ft.setExtendedState(JFrame.ICONIFIED); 
    } 
    SwingUtilities.invokeLater(new Rennable() { 
     @Override 
     void run() { 
      JDialog dlg = new JDialog(ft, "xxx", true); 
      dlg.setVisible(true);case 
    } 

这给了挥杆机会移交前的图标化反应控制到对话框。

相关问题