frame初始最小化,有个定时器定时检测,如果是最小化就变成正常大小
//定时器
Timer timer=new Timer();
timer.schedule(new frameFocus(), 3*1000, 3*1000);
//在frameFocus类中定时获取焦点并检测是否最小化,如果是就正常化
frame.requestFocus();
if(frame.getExtendedState()==JFrame.ICONIFIED)
{
frame.setExtendedState(JFrame.NORMAL);
validate();
}
但是requestFocus抛异常,请问该怎么做。
//定时器
Timer timer=new Timer();
timer.schedule(new frameFocus(), 3*1000, 3*1000);
//在frameFocus类中定时获取焦点并检测是否最小化,如果是就正常化
frame.requestFocus();
if(frame.getExtendedState()==JFrame.ICONIFIED)
{
frame.setExtendedState(JFrame.NORMAL);
validate();
}
但是requestFocus抛异常,请问该怎么做。
import java.awt.event.*;
import javax.swing.*;
import java.util.concurrent.*;public class Example {
public static void main(final String[] args) {
java.awt.EventQueue.invokeLater(new Runnable(){
public void run(){
final JFrame frame = new JFrame("Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setPreferredSize(new Dimension(600,400));
frame.getContentPane().add(new JScrollPane(new JTextArea())); // 为了验证是否获得焦点。若是、可以输入
frame.pack();
// frame.setExtendedState(JFrame.ICONIFIED); // 初始最小化
final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(new Runnable(){
public void run(){
if(frame.getExtendedState() == JFrame.ICONIFIED){
frame.setExtendedState(JFrame.NORMAL);
frame.setVisible(true); // frame.toFront();
}
}
},5,5,TimeUnit.SECONDS); // 每5秒检测一次
/* 禁止 最大/最小 化窗口
frame.addWindowStateListener(new WindowStateListener(){
public void windowStateChanged(WindowEvent e){
frame.setExtendedState(JFrame.NORMAL);
}
});
*/
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
scheduler.shutdownNow();
}
});
frame.setVisible(true); }
});
}
}