Applet isShowing()vs Frame isShowing()

时间:2012-08-23 08:47:18

标签: java applet awt frame

我正在尝试复制最初扩展Applet类的代码。 但是对于Frame,下面的代码始终为true。我知道如果Frame isShowing()也是true,isVisible()将始终返回true。除非setVisible()明确设置为false,否则isShowing()将返回true。

我的目标是在应用程序框架最小化时暂停守护程序线程。

public class Screen extends Applet{

@Override
public void init() {

    addComponentListener(new ComponentAdapter() {

        @Override
        public void componentShown(ComponentEvent e) {
            //do stuff

        }

        @Override
        public void componentHidden(ComponentEvent e) {
            //Stop doing stuff
        }       
    });
}

实施建议(BorisPavlović)

public class Screen extends Frame implements Runnable{

private boolean runL;
private Thread thread;

public Screen() {
    setSize(256,256);
    setVisible(true);

    addWindowFocusListener(new WindowAdapter() {

        @Override
        public void windowGainedFocus(WindowEvent e) {
            runL = true;
            starThread();
        }

        @Override
        public void windowLostFocus(WindowEvent e) {
            runL = false;
        }

    });

}


@Override
public void run() {
    while(runL){System.out.println("showing");}
}

private void starThread(){
    if(thread == null){
        thread = new Thread(this);
        thread.start();
    } else if(!thread.isAlive()){
        thread = new Thread(this);
        thread.start();
    }

}

2 个答案:

答案 0 :(得分:1)

查看“How to Use Focus Subsystem”教程。 WindowsAdapter允许覆盖可用于启动/停止计算的不同状态转换。

答案 1 :(得分:0)

  

我的目标是在应用程序框架最小化时暂停守护程序线程。

添加WindowListener并停止windowIconified(WindowEvent)上的计算。