Applet クラスを拡張して最初に作成したコードを複製しようとしています。ただし、以下のコードは a に対して常に true ですFrame
。isShowing()
FrameisVisible()
も trueの場合、常に 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
}
});
}
提案の実施 (Boris Pavlović)
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();
}
}