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

时间:2011-07-05 21:00:14

标签: java opengl command-line command-line-arguments lwjgl

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

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

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

7 个答案:

答案 0 :(得分:9)

您必须使用命令行参数-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。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

我也遇到了同样的错误,然后意识到我将文件命名为#34; my_lib.zip&#34;而不是&#34; my_lib.jar&#34;。也许它可以帮助别人。

答案 6 :(得分:0)

要检查的另一件事:

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