#java #swing #minimize
#java #swing #свернуть
Вопрос:
все. я хочу минимизировать свой jframe с помощью setExtendedState (JFrame. ICONIFIED).В большинстве случаев он работает должным образом, но когда он не работает, когда я блокирую экран своей ОС (windows XP) с помощью WIN L.Мой код 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. Имеет ли для вас какое-либо значение термин «взламывание блокировки»? Похоже, именно это пытается сделать ваш код.
2. Системный экран заблокирован автоматически. Я просто хочу знать, почему родительский фрейм отображается нормально, но не сворачивается после блокировки системного экрана. Какие-либо конкретные советы?
Ответ №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 возможность отреагировать на значок, прежде чем передавать управление диалоговому окну.