【发布时间】:2012-08-23 08:47:17
【问题描述】:
我正在尝试复制最初扩展 Applet 类的代码。
但下面的代码对于Frame 始终是正确的。我知道如果框架 isVisible() 也为真,isShowing() 将始终返回真。除非 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
}
});
}
实施建议(鲍里斯·帕夫洛维奇)
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();
}
}
【问题讨论】: