[英]When is Applet.stop() called?
我使用Eclipse及其Applet Viewer对applet进行了实验。 Applet Viewer出现在Eclipse的顶部,在执行Applet的过程中,我单击Eclipse图标以从任务栏中最大化它。 然后,Applet Viewer失去焦点,并Applet.stop()
。
当我最小化Eclipse时,Applet Viewer再次回到最前面,获得焦点,并Applet.start()
。 最终陷入一片混乱。
用户更改到另一个选项卡或最小化浏览器后,浏览器调用Applet.stop
是正常行为吗?我可以禁用该功能,我希望从不stop
调用。
也许我在线程中丢失了一些东西。
我的代码是这样的:
public class AppletApp extends JApplet {
public void init() {
super.init();
System.out.println("AppletApp.init()");
}
public void start() {
System.out.println("AppletApp.start()");
try {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
getContentPane().add(new JLabel("Test Label"));
}
});
} catch (InterruptedException e) {
} catch (InvocationTargetException e) {}
Runnable runnable = new Runnable() {
@Override
public void run() {
//For DJ Browser Component
NativeSwing.initialize();
NativeInterface.open();
//connect to server and start message exchange
Client.init(userInterface);
userInterface.authenticate();
NativeInterface.runEventPump();
}
};
Thread t = new Thread(runnable);
t.start();
}
public void stop() {
System.out.println("AppletApp.stop()");
}
public void destroy() {
System.out.println("AppletApp.destroy()");
}
}
用户更改到另一个选项卡或最小化浏览器后,浏览器调用Applet.stop是正常行为吗?
是的,这很正常。 从javadoc:
由浏览器或applet查看器调用,以通知此applet应该停止执行。 当包含此applet的Web页面已被另一个页面替换时,并且正要销毁applet之前,将调用此方法。
当您切换选项卡时,我认为包含的网页已被替换,因此逻辑上调用stop()
是合理的。
我可以禁用它吗,我想永远都不要叫停。
不,您不能,您无法控制。 但是,您可以依赖init()
和destroy()
方法,而不是start()
和stop()
。 start()
和stop()
用于恢复/暂停任何消耗资源的内容,这些资源在不可见的情况下是不必要的(例如,动画在不可见的情况下是没有意义的)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.