当我运行.jar时,我得到一个“java.library.path中没有lwjgl”错误

我正在通过Netbeans使用LWJGL库在Java中制作基本游戏。

我已经创建了一个包含lwjgl,lwjgl_util和jinput .jar的库,并且我将-Djava.library.path = C:\ LWJGL \ native \ windows添加到项目属性中的“Run”类别。

当我在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.(Sys.java:99) at org.lwjgl.opengl.Display.(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库文件移动到与Game.jar相同的目录中的’lib’文件夹中,并将它们移动到与Game.jar相同的目录中,但是我得到了同样的错误。 有人可以帮助我,为什么我似乎无法在netbeans之外工作?

您必须使用命令行参数-Djava.library.path =“path / to / natives”将jvm指向本机文件所在的位置。 您可以使用批处理(.bat)文件来指定它并为您启动应用程序。

或者,您可以使用JarSplice之类的工具从您的所有jar中创建单个可执行jar文件,同时在其中包含您的本机文件。 它可以自动完成手动指定本机的棘手部分,并提供更好的最终用户体验。

要使用JarSplice,只需在jar选项卡中选择game.jar,lwjgl.jar,lwjgl_util.jar和jinput.jar。 然后是本机选项卡中的所有* .dll,*。so,* .dylib和* .jnilib文件。 在类选项卡上添加主类并创建单个可执行jar。

LWJGL需要特定平台的本机组件位于java.library.path 。 它们位于LWJGL发行版的子目录中,在Linux,OSX和Solaris以及.dll for Windows中以.so结尾。

当我遇到这个问题时,这是因为我不小心将参数指定为选项面板的运行类别下名为“Arguments”的字段中的本机位置(-Djava.library.path = / native /) ‘vm选项’。 如下所示: http : //s30.postimg.org/6f90akidt/Capture.png

另一种方法是使用Java Web Start(jnlp): http ://lwjgl.org/forum/index.php?topic = 3763.0

这使得在某些方面更轻松地共享项目。

我有这个问题并使用jarSplice修复它(http://ninjacave.com/jarsplice)

确保在创建胖jar之前删除jar中所有预先放置的本机,否则会产生重复错误

我也得到了同样的错误,然后意识到我将文件命名为“my_lib.zip”而不是“my_lib.jar”。 也许它可以帮助某人。

另一件要检查的事情:

  • 如果您使用的是32位JVM,则需要32位库。 (即使在64位操作系统上)
  • 如果您使用的是64位JVM,则需要64位库。