我有一个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中使用自定义类加载器作为读者练习. 🙂