Когда я запускаю .jar, я получаю ошибку «No lwjgl in java.library.path» - PullRequest
7 голосов
/ 06 июля 2011

Я делаю основную игру на Java с использованием библиотеки LWJGL через Netbeans.

Я создал библиотеку с lwjgl, lwjgl_util и jinput .jar и добавил -Djava.library.путь = C: \ LWJGL \ native \ windows к категории «Выполнить» в свойствах проекта.

Когда я запускаю файл в Netbeans, он работает без проблем.Но когда я запускаю .jar с помощью двойного щелчка по файлу, ничего не появляется (даже насколько я могу судить, даже мгновенное окно с ошибкой cmd).И когда я запускаю файл через командную строку, я получаю:

C:\Users\200160765>java -jar "C:\Users\200160765\Documents\NetBeansProjects\Game
\dist\Game.jar"
Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.libr
ary.path
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.loadLibrary0(Unknown Source)
        at java.lang.System.loadLibrary(Unknown Source)
        at org.lwjgl.Sys$1.run(Sys.java:73)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.lwjgl.Sys.doLoadLibrary(Sys.java:66)
        at org.lwjgl.Sys.loadLibrary(Sys.java:82)
        at org.lwjgl.Sys.<clinit>(Sys.java:99)
        at org.lwjgl.opengl.Display.<clinit>(Display.java:130)
        at game.Draw.createWindow(Draw.java:198)
        at game.Draw.init(Draw.java:214)
        at game.Draw.run(Draw.java:56)
        at game.Main.main(Main.java:9)

Я попытался переместить файлы библиотек DLL и .jar в папку 'lib' в том же каталоге, что и Game.jar,и перемещая их в тот же каталог, что и Game.jar, но я получаю ту же ошибку.Может ли кто-нибудь помочь мне понять, почему я не могу заставить это работать за пределами NetBeans?

Ответы [ 7 ]

9 голосов
/ 06 июля 2011

Вы должны указать jvm, где находятся собственные файлы, используя параметр командной строки -Djava.library.path = "path / to / natives".Вы можете использовать пакетный файл (.bat), чтобы указать это и запустить свое приложение для вас.

В качестве альтернативы вы можете использовать инструмент, такой как JarSplice , чтобы создать один исполняемый файл JAR из всех вашихбанки и в то же время включить в него ваши родные файлы.Он автоматизирует сложную часть задания нативов вручную и обеспечивает более приятный опыт конечного пользователя.

Чтобы использовать JarSplice, просто выберите ваши game.jar, lwjgl.jar, lwjgl_util.jar и jinput.jar на вкладке jars,Затем все файлы * .dll, * .so, * .dylib и * .jnilib на вкладке «Нативы».Добавьте свой основной класс на вкладку класса и создайте единственный исполняемый файл jar.

3 голосов
/ 06 июля 2011

LWJGL нужны собственные компоненты для вашей конкретной платформы в java.library.path. Они находятся в подкаталоге native в дистрибутиве LWJGL и оканчиваются на .so в Linux, OSX и Solaris и .dll для Windows.

2 голосов
/ 26 августа 2014

Когда у меня возникла эта проблема, это было потому, что я случайно поместил аргумент, чтобы указать местоположение нативов (-Djava.library.path = / native /) в поле с именем «Аргументы» в категории выполнения параметровпанель, вместо «Параметры VM».Как видно здесь: http://s30.postimg.org/6f90akidt/Capture.png

0 голосов
/ 14 августа 2018

Еще одна вещь, чтобы проверить:

  • Если вы используете 32-битную JVM, вам нужны 32-битные библиотеки. (Даже на 64-битной ОС)
  • Если вы используете 64-битную JVM, вам нужны 64-битные библиотеки.
0 голосов
/ 18 февраля 2015

Я также получил ту же ошибку, а затем понял, что я назвал файл "my_lib.zip" вместо "my_lib.jar". Может быть, это может кому-то помочь.

0 голосов
/ 28 декабря 2012

У меня была эта проблема, и я исправил ее с помощью jarSplice (http://ninjacave.com/jarsplice)

убедитесь, что вы удалили все предварительно помещенные нативы в банке, прежде чем создавать толстую банку, в противном случае это приведет к дублированию ошибки

0 голосов
/ 06 июля 2011

И еще один способ сделать это с помощью Java Web Start (jnlp): http://lwjgl.org/forum/index.php?topic=3763.0

В некоторых случаях это облегчает совместное использование вашего проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...