2011-04-12 75 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 
    } 

這給了揮杆機會移交前的圖標化反應控制到對話框。

相關問題