19

对于我的 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、lib/x264-SunOS-sparc.jar 或 lib/x264-SunOS-x86.jar 中的一个 jar。

当我使用 JRE6 加载 x264.jar 时,它运行良好。但是当我更新到 JRE7 时,它无法加载 x264.jar。

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

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

4

4 回答 4

1

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

<resources os="Windows" arch="amd64">
<resources os="Windows" arch="x86_64">
<resources os="Windows" arch="x86">
于 2014-01-21T04:05:22.310 回答
0

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

  1. 将 dlls/sos 放入您的 jar 文件中,如示例中所示:jssc.jar
  2. System.load(libFolderPath + fileSeparator + libName);使用like used here加载库。
  3. 正如 Joseph 所提到的,请注意 win、solaris、linux、arm 以及 i86 和 amd64 位系统之间的细粒度版本差异。因此,如果您不提供 64 位 dll 并使用 64 位 Java 运行它,它将无法工作......
于 2014-02-18T21:42:47.347 回答
0

我有类似的麻烦;然而,即使在 JRE 6 中,这也无法正常工作。

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

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

显然 JRE 在下载 nativelib 资源时会遇到问题。

该错误仍处于打开状态,并针对 Java 版本 8 ...

于 2013-08-19T12:38:05.923 回答
0

我忘记了我不久前解决了这个问题。我发现我必须在 Java 代码中使用 System.loadLibrary("jarNameNoExtension");

希望这对其他人有帮助。

于 2014-10-30T14:47:41.450 回答