0

我使用 Eclipse 及其 Applet Viewer 来试验我的小程序。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()");
    }
}
4

1 回答 1

4

一旦用户更改为另一个选项卡或最小化浏览器,浏览器调用 Applet.stop 是正常行为吗?

是的,这很正常。从javadoc:

由浏览器或小程序查看器调用以通知此小程序应停止执行。当包含此小程序的网页已被另一个页面替换时,并且在小程序要被销毁之前调用它。

当您切换选项卡时,我认为包含的网页已被替换,因此stop()调用它是合乎逻辑的。

我可以禁用它吗,我希望停止永远不会被调用。

不,你不能,你无法控制它。但是,您可以依赖init()anddestroy()方法而不是start()and stop()start()并且stop()用于恢复/暂停任何消耗资源的东西,如果不可见则不需要(例如,如果不可见,动画将毫无意义)。

于 2013-01-03T11:10:36.767 回答