【问题标题】:Java - Library path errorJava - 库路径错误
【发布时间】:2012-04-08 14:26:22
【问题描述】:

我正在尝试启动我的 java 游戏,但我在使用 java 命令行时遇到了一些问题:

这是我输入的内容:

C:\>java -Djava.library.path=%cd%\lib -jar game.jar

这是我得到的:

Exception in thread "main" java.lang.NoClassDefFoundError: org/lwjgl/LWJGLException
    at com.game.Main.main(Main.java:7)
    Caused by: java.lang.ClassNotFoundException: org.lwjgl.LWJGLException
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 1 more

我可以使用 Eclipse(使用作为 Java 应用程序运行)开始我的游戏,但在菜单之后我收到以下错误:

Exception in thread "Thread-5" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.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:72)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.lwjgl.Sys.doLoadLibrary(Sys.java:65)
    at org.lwjgl.Sys.loadLibrary(Sys.java:81)
    at org.lwjgl.Sys.<clinit>(Sys.java:98)
    at org.lwjgl.opengl.Display.<clinit>(Display.java:129)
    at com.game.displaygui.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

lwjgl.jar 已放入文件夹\lib

你能解释一下吗?

谢谢。

【问题讨论】:

    标签: java path


    【解决方案1】:

    这是因为 lwjgl 库由两个组件组成:

    • 包含 Java 代码的 .jar 文件
    • 和本机二进制库(根据您的操作系统,可以是 .so.dll.dylib

    您遇到的第一个错误是因为您正在设置库路径,该路径应该包含 native 库,但它确实包含 .jar。所以你会得到一个java.lang.NoClassDefFoundError,因为你应该将库路径设置为包含本机库的文件夹,或者将类路径设置为包含真正的 lwjgl.jar 文件。

    您在 Eclipse 中遇到的第二个错误是后续步骤:您的类路径包含 jar 库,但无法找到附加到它的本机库,您可以通过以下方式修复它:

    【讨论】:

      【解决方案2】:

      您应该明确指定要包含哪些 lib 文件(由 ; 分隔):

      -cp %cd%\lib\lwjdl.jar;%cd%\lib\<another-lib>.jar
      

      不要试图使用通配符 *,因为它弊大于利(根据以前的经验:))

      【讨论】:

        【解决方案3】:

        您使用java.library.path 选项来指定要加载的本机库的位置。在该选项指向的位置,您将放置 LWJGL 所需的所有 dll.so 文件。另一方面,您需要通过-classpath 选项确保所有必需的JAR 文件都在您的类路径中。目前,您的 JAR 文件位于错误的目录中。

        【讨论】:

        • 我不明白我应该在这里做什么?
        【解决方案4】:

        在 Eclipse 中,如果您使用 maven。

        将以下内容添加到项目“运行”:“VM 选项”。

        -Djava.library.path=yourpath/youproject/java/target/natives
        

        【讨论】:

          猜你喜欢
          • 2020-03-28
          • 1970-01-01
          • 2015-01-20
          • 2015-06-21
          • 2011-11-06
          • 2013-04-14
          • 2015-03-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多