Почему setExtendedState (JFrame.ICONIFIED) не работает при заблокированном экране Windows? - PullRequest
0 голосов
/ 12 апреля 2011

все. я хочу минимизировать мой jframe с помощью setExtendedState (JFrame.ICONIFIED), в большинстве случаев он работает правильно, но когда он не работает, когда я блокирую экран os (windows XP) с помощью WIN + L. Мой код выглядит следующим образом:

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 голосов
/ 10 мая 2011

Возможно, вы управляете компонентами 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 возможность ответить на иконизацию, прежде чем передать управление диалогу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...