【问题标题】:Java applet issue: dll already loaded in another classloaderJava 小程序问题:dll 已加载到另一个类加载器中
【发布时间】:2011-12-30 15:05:31
【问题描述】:

我需要创建一个加载本地 DLL 的 Java 小程序。它工作正常,但只是第一次。如果我刷新页面,它总是通过抛出以下异常来抱怨:

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

我已经阅读了很多关于这个问题的信息,但仍然找不到解决方案。任何人都可以帮忙吗?提前致谢。

【问题讨论】:

    标签: java applet java-native-interface classloader


    【解决方案1】:

    This article 似乎提供了一些很好的建议,以确保每次调用小程序时获得相同的ClassLoader

    【讨论】:

    • 太棒了,非常感谢!问题解决了。我一直在看如何解决 java 源代码中的问题,但解决方法是如何在 HTML 中嵌入小程序!
    【解决方案2】:

    我通过在 html 页面的小程序标签中添加以下 sn-p 解决了同样的问题。

    <param name="classloader_cache" value="false">
    

    我在小程序的 JNLP 文件中有以下参数。这也可能是相关的。

    <applet-desc ...>
        <param name="separate_jvm" value="true"/>
    </applet-desc>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多