我正在尝试复制最初扩展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();
}
}
答案 0 :(得分:1)
查看“How to Use Focus Subsystem”教程。 WindowsAdapter
允许覆盖可用于启动/停止计算的不同状态转换。
答案 1 :(得分:0)
我的目标是在应用程序框架最小化时暂停守护程序线程。
添加WindowListener
并停止windowIconified(WindowEvent)
上的计算。