2

私は2つのアプレットを持っています。FirstApplet アプレットは、メインの HTML ページにあります。メイン ページは、javascript window.open(...) を使用して、SecondApplet アプレットが埋め込まれた新しいページを開きます。

以下は、両方のアプレットの定義方法です。

public class SecondApplet extends JApplet{
    private static Long value;
    public void init(){
        value = new Long(6);
    }
    public static void testValue(){
        System.out.println(value);
    } 
}

public class FirstApplet extends JApplet{
    public void testValue(){
        SecondApplet.testValue();
    }
}

今私の問題は FirstApplet が呼び出すときです

SecondApplet.testValue() 

static フィールドの値が失われ、値が 0 になりました。また、SecondApplet init() メソッドでインスタンス化される独自のオブジェクト モデルを試してみましたが、FirstApplet.testValue() が呼び出されると、これらのオブジェクトは NULL になります。

この動作が発生する理由を知っている人はいますか? 両方のアプレットが同じ JVM にあるので、私は困惑しています。

ところで、私も getAppletContext.getApplet("secondapplet") を使用してみましたが、常に NULL を返します。getAppletContext.getApplets() でさえ、常に 1 つの要素を返します。HTML ページで name 属性を確認しましたが、正しいです。

これがセキュリティ上の問題である場合は、エラーや警告が表示されないことを追加したかっただけです。

前もって感謝します。

4

1 に答える 1

-1

それらは同じ JVM にありますが、サンドボックス化されています。それらは別のクラス ローダーを使用し、他のアプレットのクラス ローダーへのアクセスは禁止されているため、別の JVM にある可能性もあります。これはセキュリティ機能です。悪意のあるアプレットが、開いているすべてのブラウザ ウィンドウのデータにアクセスするのは望ましくありません。

異なるブラウザー ウィンドウ間でデータを共有することは、当然のことながら、注意が必要です。本当にそれを行う必要がある場合は、具体的な要件を教えてください。つまり、なぜデータを共有する必要があるのでしょうか?

于 2012-12-07T15:15:05.700 に答える