9

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

我创建了一个包含 lwjgl、lwjgl_util 和 jinput .jar 的库,并将 -Djava.library.path=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 库文件移动到与 Game.jar 相同的目录中的“lib”文件夹中,并将它们移动到与 Game.jar 相同的目录中,但我得到了同样的错误。有人可以帮我解释为什么我似乎无法在 netbeans 之外使用它吗?

4

7 回答 7

9

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

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

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

于 2011-07-05T21:09:21.697 回答
3

LWJGL 需要您的特定平台的本机组件java.library.path。它们位于nativeLWJGL 发行版的子目录中,并.so在 Linux、OSX 和 Solaris 以及.dllWindows 上结束。

于 2011-07-05T21:04:49.450 回答
2

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

于 2014-08-25T20:06:50.370 回答
0

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

这使得在某些方面更容易共享您的项目。

于 2011-07-05T21:31:12.107 回答
0

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

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

于 2012-12-28T17:12:45.283 回答
0

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

于 2015-02-18T14:31:07.533 回答
0

另一件事要检查:

  • 如果您使用的是 32 位 JVM,则需要 32 位库。(即使在 64 位操作系统上)
  • 如果您使用的是 64 位 JVM,则需要 64 位库。
于 2018-08-14T11:19:07.403 回答