java – 同一个jvm中两个应用程序的静态变量冲突

我有一个applet应用程序,它使用了几个静态对象(我们无法摆脱它们).该应用程序从html页面启动.浏览器为任意数量的选项卡创建单个jvm,因此如果您使用此应用程序打开两个选项卡,静态变量将与它们共享.在此之后两者都无法正常工作.我们尝试使用separate_jvm但它并不适用于所有浏览器.

还有其他解决方案吗?

解决方法:

此测试用例演示了在从类加载器的两个实例加载类时,单个类中的静态字段如何在同一JVM中具有不同的值:

@Test
public void test() throws Exception {

    MyLoader customLoader1 = new MyLoader();
    MyLoader customLoader2 = new MyLoader();

    Class<?> c1 = customLoader1.loadClass(SPECIAL_CLASS_NAME);
    Class<?> c2 = customLoader2.loadClass(SPECIAL_CLASS_NAME);

    LoadedClass o1 = (LoadedClass) c1.newInstance();
    LoadedClass o2 = (LoadedClass) c2.newInstance();

    o1.setStaticPart(100d);
    o2.setStaticPart(1d);

    assertEquals(100d, o1.getStaticPart());
    assertEquals(1d, o2.getStaticPart());
}

如何在applet中使用自定义类加载器作为读者练习.

上一篇:Java:JOptionPane会影响父JFrame吗? (包括SSCCE)


下一篇:将FEST-Swing与Java applet一起使用