我有一个applet应用程序,它使用了几个静态对象(我们无法摆脱它们)。该应用程序从html页面启动。浏览器为任意数量的选项卡创建单个jvm,因此如果您使用此应用程序打开两个选项卡,静态变量将与它们共享。在此之后两者都无法正常工作。我们尝试使用separate_jvm,但它并不适用于所有浏览器。
还有其他解决方案吗?
答案 0 :(得分:2)
此测试用例演示了在类加载器的两个实例中加载类时,单个类中的静态字段如何在同一个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中使用自定义类加载器作为练习给读者留下。 : - )