我需要创建一个加载本地DLL的Java applet。它工作正常,但只是第一次。如果我刷新页面,它总是抱怨抛出以下异常:
Exception: java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: Native Library E:\test.dll already loaded in another classloader
关于如何解决此问题的任何想法?
这是我的代码:
public class NativeWrapper
{
public native String GetIP();
public NativeWrapper(final String nativeLib) {
try {
System.load(nativeLib);
} catch (UnsatisfiedLinkError e) {
System.out.println("UnsatisfiedLinkError exception" + e);
}
}
}
小程序代码:
public class MyApplet extends Applet {
private static NativeWrapper dll = new NativeWrapper("e:/test.dll");
public MyApplet () {
}
// to be called by javascript on html page
public string GetIPAddress() {
return dll.GetIP();
}
}
我在这个问题上已经阅读了很多,但仍然无法找到解决方案。有人可以帮忙吗?提前谢谢。
答案 0 :(得分:3)
This article似乎提供了一些很好的建议,以确保您为每个applet调用获得相同的ClassLoader
。
答案 1 :(得分:1)
我通过在html页面上的applet标记添加以下代码段解决了同样的问题。
<param name="classloader_cache" value="false">
我在applet的JNLP文件中有以下param。这可能也很重要。
<applet-desc ...>
<param name="separate_jvm" value="true"/>
</applet-desc>