【问题标题】:Why setExtendedState(JFrame.ICONIFIED)does not work while windows screen locked?为什么在 Windows 屏幕锁定时 setExtendedState(JFrame.ICONIFIED) 不起作用?
【发布时间】:2011-04-12 02:52:28
【问题描述】:

全部。 我想用 setExtendedState(JFrame.ICONIFIED) 最小化我的 jframe,在大多数情况下,它可以正常工作,但是当我用 WIN+L 锁定我的 os(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 
    }   
}

任何帮助将不胜感激。

【问题讨论】:

  • “开锁”这个词对你来说有什么意义吗?这就是您的代码似乎正在尝试的。
  • 系统屏幕自动锁定。我只想知道为什么父框架显示正常但系统屏幕锁定后没有最小化。有什么具体建议吗?

标签: java swing minimize


【解决方案1】:

您可能是从主线程而不是事件调度线程操作 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 有机会在将控制权交给对话框之前响应图标化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    相关资源
    最近更新 更多