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() 

静态字段失去了它的值,现在它的值为 0。我还尝试了我自己的对象模型,它们在 SecondApplet init() 方法中被实例化,但是当调用 FirstApplet.testValue() 时,这些对象现在为 NULL。

任何人都知道为什么会发生这种行为?我只是感到困惑,因为两个 Applet 都生活在同一个 JVM 中。

顺便说一句,我也尝试使用 getAppletContext.getApplet("secondapplet") 但它总是返回 NULL。甚至 getAppletContext.getApplets() 也总是返回一个元素。我在 HTML 页面中验证了 name 属性,它是正确的。

如果这是安全问题,只是想补充一点,我没有收到任何类型的错误或警告。

提前致谢。

4

1 回答 1

-1

它们在同一个 JVM 中,但它们是沙盒的。它们使用不同的类加载器,并且被禁止访问其他小应用程序的类加载器,因此它们也可能位于不同的 JVM 中。这是一项安全功能。您不希望某些恶意小程序访问所有打开的浏览器窗口中的数据。

在不同的浏览器窗口之间共享数据很棘手,因为它应该是。如果您确实需要这样做,您应该告诉我们您的具体要求是什么。也就是说,为什么需要共享数据?

于 2012-12-07T15:15:05.700 回答