Подтвердить что ты не робот

Обновление JRE7 не может загружать банку nativelib, но JRE6 отлично работает

Для моего 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, но 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.

Когда я использовал JRE6 для загрузки x264.jar, он работал нормально. Но когда я обновился до JRE7, он не может загрузить x264.jar.

При использовании JRE6 url будет "x264.jar" info, например jar: http://test.local:8080/JNLP.jar!/x264.jar, но использовать JRE7, url будет null, и я нашел код не загружать nativelib "x264.jar"

Есть ли у кого-нибудь, что JRE7 не может загрузить nativelib.jar? Проблема с использованием Thread.currentThread(). GetContextClassLoader() для загрузки "x264.jar"?

4b9b3361

Ответ 1

Убедитесь, что у вас есть правильный побитовый родной двоичный файл, соответствующий вашему JRE. Если вы тестируете 64-битную JRE, вам нужен 64-битный родной двоичный файл. Если вы тестируете 32-битную JRE, вам понадобится 32-битный родной двоичный файл. Возможно, вам потребуется включить ресурсы для каждого из этих трех:

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

Ответ 2

У меня были подобные проблемы; однако даже в JRE 6 это не помогло этому.

Обнаружена ошибка, которая может быть связана с этим:

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

По-видимому, у JRE может возникнуть проблема с загрузкой ресурсов nativelib.

Ошибка все еще открыта и нацелена на версию 8 java...

Ответ 3

Следующий "dll полагающийся" апплет работает отлично (помимо проблем безопасности при использовании 1.7.0_51 (вам необходимо уменьшить параметры безопасности к среднему, поскольку он сам подписан)). Поэтому, если механизм загрузки пользовательского lib файла jnlp сломан, вы можете распространять ваши DLL файлы вместе с обычным файлом jar, как в верхнем примере.

  • Поместите dlls/sos в ваш файл jar, как в примере: jssc.jar
  • Загрузите библиотеки с помощью System.load(libFolderPath + fileSeparator + libName);, например, здесь.
  • Как упоминалось Джозефом, обратите внимание на мелкозернистую дифференциацию версий между системами win, solaris, linux, arm и i86 и amd64. Так что, если вы, например, не поставляйте 64-битную DLL и запускайте ее с 64-битной Java, она не будет работать...

Ответ 4

Я забыл, что решил это недавно. Я обнаружил, что мне пришлось обрабатывать это в Java-коде с помощью System.loadLibrary( "jarNameNoExtension" );

Надеюсь, это поможет другим.