【问题标题】:run java from terminal that depend on external libraries从依赖于外部库的终端运行 java
【发布时间】:2012-08-29 09:02:28
【问题描述】:

我已经阅读了很多,但还没有找到解决方案。

我正在使用lwjgl,它需要 2 个 jar 和一个本地库才能运行:lwjgl.jarlwjgl_util.jar 和本地库。我已经以我能想到的各种方式尝试了这个,无论如何,我现在正在尝试这样的命令:

java - Djava.library.path="libs/natives/" -cp libs/jars/lwjgl.jar:libs/jars/lwjgl_util.jar DisplayTest.class

但在我尝试的每一种方式中,我都得到了:

Exception in thread "main" java.lang.NoClassDefFoundError: DisplayTest/class
Caused by: java.lang.ClassNotFoundException: DisplayTest.class
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: DisplayTest.class. Program will exit

哦,值得一提的是,我正在使用 linux 终端。 另外,我让它在 Eclipse 中运行得非常好,所以我真的不明白这里发生了什么。

【问题讨论】:

  • Djava.library.path="libs/natives/" 前面有空格吗??应该是-Djava.library.path="libs/natives/",构造-D用于定义系统属性
  • 是的,对不起,它应该是-D,我在写线程时遇到了一些问题:)

标签: java linux terminal lwjgl


【解决方案1】:

我也遇到了类似的错误。

只需在运行时在类路径中包含您的工作目录(您在其中拥有自己的类)以及所需的库。

NoCLassDefFoundError 发生在机器在运行时无法找到您的.class 文件时(即使它们已被编译,即编译时不会出错但仅在运行时)

第一步:编译 javac -classpath "path/to/lib1:path/to/lib2" yourfile.java 第 2 步:运行 java - classpath "path/to/lib1:path/to/lib2:path/to/your/currentdirectory/wherethedotclass/filearecreated/" yourfile

【讨论】:

    【解决方案2】:

    尝试去掉“.class”,例如

    java -Djava.library.path="libs/natives/" -cp libs/jars/lwjgl.jar:libs/jars/lwjgl_util.jar DisplayTest.class

    会变成:

    java -Djava.library.path="libs/natives/" -cp libs/jars/lwjgl.jar:libs/jars/lwjgl_util.jar DisplayTest

    通过添加“.class”,您是在告诉命令您在名为“DisplayTest”的目录中有一个名为“class”的类,这不是您想要实现的。这显示在这一行中:

    Exception in thread "main" java.lang.NoClassDefFoundError: DisplayTest/class
    

    【讨论】:

    • 非常感谢您的回复!但是,这对我也不起作用,仍然找不到类的东西:(
    • @user1295313 没关系 :) 输出现在说什么?
    • @user1295313 认为我可能已经解决了这个问题。尝试输入“.;”在类路径的开头,例如java -Djava.library.path="libs/natives/" -cp .;libs/jars/lwjgl.jar:libs/jars/lwjgl_util.jar DisplayTest
    • @user1295313 另外,您使用了“:”而不是“;”在你的 jar 文件之间,只是注意到了。
    【解决方案3】:

    首先,您只需要将类名传递给 java:

    java -Djava.library.path="libs/natives/" 
         -cp libs/jars/lwjgl.jar:libs/jars/lwjgl_util.jar DisplayTest
    

    (为了可读性而换行)

    我会尝试以下方法:

    1) 使用 CLASSPATH 环境变量,如:

      CLASSPATH=.:/path/to/lwjgl/lwjgl.jar:/path/to/lwjgl/lwjgl_util.jar 
      export CLASSPATH
    

    注意类路径开头的点 (.);

    2) 运行您的 java 应用程序:

      java -Djava.library.path="libs/natives" DisplayTest
    

    如果可行,请将上述命令添加到 shell 脚本中。祝你好运!

    【讨论】:

    • 我想补充一点,“DisplayTest/class”中的“/”是这里的线索。类名中不能有“/”!
    • 首先,非常感谢您的回复,但它确实对我有用。我仍然找不到主类:DisplayTest 的东西。即使尝试立即复制您的代码,仍然没有工作:(
    • 对不起,这显然修复了我提供的错误,但是在修复 .class 内容之后出现的错误非常像,我有一段时间没有注意到任何变化。
    【解决方案4】:

    当触发 java 命令时使用 -cp 或 -classpath。只需输入java 命令即可查看使用情况

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多