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抛异常,请问该怎么做。

解决方案 »

  1.   

    import java.awt.*;
    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); }
        });
        }
    }