【问题标题】:Can't start .jar file (using LWJGL)无法启动 .jar 文件(使用 LWJGL)
【发布时间】:2011-10-08 14:43:47
【问题描述】:

美好的一天!

我创建了 jar 文件(使用 Netbeans),但我无法启动它。该项目使用 lwjgl 库。在我的 IDE 中,它运行良好。

我使用下一个命令:

java -jar LWJGL_TimerExample.jar 

答案是:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1758)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1045)
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 Sourse.TimerExample.start(TimerExample.java:32)
at lwjgl_timerexample.Main.main(Main.java:21)

其他项目(没有这个库)工作正常。我该如何解决这个错误?

我的清单是:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.1
Created-By: 1.6.0_26-b03-384-10M3425 (Apple Inc.)
Main-Class: lwjgl_timerexample.Main
Class-Path: lib/jinput.jar lib/lwjgl.jar lib/lwjgl_util.jar
X-COMMENT: Main-Class will be added automatically by build

【问题讨论】:

  • 解决这个问题:no lwjgl in java.library.path

标签: java macos jar lwjgl unsatisfiedlinkerror


【解决方案1】:

它不会按照您当前尝试的方式工作,因为您需要将本机文件放在 jar 旁边并通过“-Djava.library.path”参数指向它们。

如果您只想要一个 jar 并且想要避免命令行和原生文件的麻烦,请使用 JarSplice 工具。 JarSplice 易于使用,并且会自动为您处理本机文件内容。

1) 只需将您的项目(类和资源)导出到 jar 中(通过 IDE 更容易做到)。

2) 然后运行 ​​JarSplice,将所需的所有 jar 添加到 jar 选项卡(您的应用程序 jar、lwjgl.jar 和您正在使用的任何其他外部 jar)。

3)然后在 natives 选项卡上添加所有 natives 文件(windows *.dll、linux *.so、mac *.dylib 和 *.jnilib)。

4) 在类选项卡上添加您的主类。然后创建你的罐子。

然后你可以通过双击来运行这个jar(或者如果你希望通过命令行使用'java -jar yourapp.jar')。

【讨论】:

  • 抱歉愚蠢的问题...我有一个名为 LWJGL_TimerExample 的项目。它由 2 个包组成 - Sourse 和 lwjgl_timerexample。 Sourse 包含 TimerExample.java,lwjgl_timerexample 包含 Main.java。主课的正确方法是什么? lwjgl_timerexample.Main?
  • 是的,packagename.MainClass,所以在您的情况下,如果 Main 是您要运行的类,它将是 lwjgl_timerexample.Main。
  • 当我创建 fat jar 时,我收到了这个错误:Jar creation failed due to the following exception:duplicate entry: META-INF/MANIFEST.MF
【解决方案2】:

来自LWJGL wiki

LWJGL 由两部分组成,Java 部分和本机代码部分。您必须正确设置这两个部分才能使 lwjgl 正常工作。为了设置 java 部分,您必须将 lwjgl.jar 添加到类路径(作为外部库 jar)。至于本机部分(Windows 上的 *.dll 文件,Linux 上的 *.so,mac 上的 *.jnilib 等),您必须告诉 java 本地人位于哪个文件夹中,以便 LWJGL 能够找到它们(使用 -Djava.library.path=path/to/dir vm 参数来执行此操作)。

您似乎错过了第二部分 - 在您的 java.library.path 上拥有本机库。

【讨论】:

  • 是的,我的程序使用原生部分。我以为IDE会自动添加。
  • 到清单?我对此不是 100% 确定,但是查看 download.oracle.com/javase/6/docs/technotes/guides/jar/… 我看不到在清单中指定库路径的方法。将 -Djava.library.path=/path/to/native/lib 添加到命令行是否有效?
  • A 试过了:java -jar -Djava.library.path=-Djava.library.path=/Users/serg/LWJGL_2_7_1/lwjgl-2.7.1/native/macosx LWJGL_TimerExample.jar 窗口出现了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多