我正在通过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之外工作?
答案 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)
要检查的另一件事: