所有。 我想用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
}
}
任何帮助将不胜感激。
答案 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有机会在将控制权交给对话框之前响应图标化。