更新到JRE7,无法加载nativelib jar,但JRE6工作正常

时间:2013-01-13 12:08:34

标签: native java jnlp

对于我的JNLP文件,有一些如下所示的nativelib信息:

<resources os="Windows">
    <nativelib href="lib/x264-win.jar" />
</resources>
<resources os="SunOS" arch="sparc">
    <nativelib href="lib/x264-SunOS-sparc.jar" />
</resources>
<resources os="SunOS" arch="x86">
    <nativelib href="lib/x264-SunOS-x86.jar" />
</resources>

当我更新到JRE7时,无法加载nativelib jar,但JRE6工作正常。

加载nativelib代码如下:

String source = "x264.jar";
ClassLoader cl = Thread.currentThread().getContextClassLoader();
URL url= cl.getResource(source);

“x264.jar”是x264-win.jar中的一个jar,lib / x264-SunOS-sparc.jar或lib / x264-SunOS-x86.jar。

当我使用JRE6加载x264.jar时,它工作正常。 但是当我更新到JRE7时,它无法加载x264.jar。

当使用JRE6时,url将是“x264.jar”信息,如jar:http://test.local:8080/JNLP.jar!/x264.jar, 但是使用JRE7,url会为null,我发现代码没有加载nativelib“x264.jar”

是否有人发现JRE7无法加载nativelib.jar? 是使用Thread.currentThread()。getContextClassLoader()来加载“x264.jar”的问题吗?

4 个答案:

答案 0 :(得分:1)

确保您具有正确的按位原生二进制文件以匹配您的JRE。如果要在64位JRE上进行测试,则需要64位本机二进制文件。如果您正在测试32位JRE,则需要32位本机二进制文件。您可能需要为这三者中的每一部分包含资源:

<resources os="Windows" arch="amd64">
<resources os="Windows" arch="x86_64">
<resources os="Windows" arch="x86">

答案 1 :(得分:0)

我有类似的麻烦;然而,即使在JRE 6中,这也无法实现。

发现了一个可能与之相关的错误:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6758884

显然JRE可能无法下载nativelib资源。

该错误仍然打开,并且针对java版本8 ...

答案 2 :(得分:0)

以下“dll relying”applet工作正常(除了使用1.7.0_51时的安全问题(您需要将安全设置降低到中等,因为它是自签名的))。 因此,如果jnlp文件的本机lib加载机制被破坏,那么您可以将.dll文件与普通jar文件一起分发,如上例所示。

  1. 将dlls / sos放在jar文件中,如示例所示:jssc.jar
  2. 使用System.load(libFolderPath + fileSeparator + libName);加载库,例如使用here
  3. 如Joseph所述,请注意win,solaris,linux,arm和i86以及amd64位系统之间的细粒度版本区别。所以,如果你是不提供64位dll并使用64Bit Java运行它将无法正常工作......

答案 3 :(得分:0)

我忘记了我刚才解决了这个问题。我发现我必须使用System.loadLibrary在Java代码中处理这个问题(&#34; jarNameNoExtension&#34;);

希望能帮助他人。

相关问题