为什么setExtendedState(JFrame.ICONIFIED)在Windows屏幕锁定时不起作用?

时间:2011-04-12 02:52:29

标签: java swing minimize

所有。 我想用setExtendedState(JFrame.ICONIFIED)最小化我的jframe,在大多数情况下,它工作正常,但是当我用WIN + L锁定我的操作系统(Windows XP)屏幕时它不起作用。我的wimple代码如下:

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 
    }   
}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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 
     }   

这使Swing有机会在将控制权交给对话框之前响应图标化。