0

Eclipseとそのアプレットビューアを使用してアプレットを試します。アプレットビューアがEclipseの上部に表示され、アプレットの実行中にEclipseアイコンをクリックして、タスクバーから最大化します。その後、アプレットビューアはフォーカスを失い、Applet.stop()呼び出されます。

Eclipseを最小化すると、アプレットビューアが再び前面に出て、フォーカスを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から:

ブラウザまたはアプレットビューアによって呼び出され、実行を停止する必要があることをこのアプレットに通知します。このアプレットを含むWebページが別のページに置き換えられたとき、およびアプレットが破棄される直前に呼び出されます。

タブを切り替えると、含まれているWebページが置き換えられたと見なされるため、stop()呼び出されるのは論理的です。

それを無効にできますか、停止が呼び出されないようにします。

いいえ、できません。それを制御することはできません。init()ただし、 andのdestroy()代わりにstart()andメソッドを使用することもできますstop()start()表示されstop()ていない場合は不要なリソースを消費するものを再開/一時停止するためのものです(たとえば、アニメーションは表示されていない場合は無意味です)。

于 2013-01-03T11:10:36.767 に答える