我读了很多书,但还没能找到解决方案。
我使用的是lwjgl
,它需要2个jar和一个本地库来运行:lwjgl.jar
、lwjgl_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中运行得非常好,所以我真的不明白这里发生了什么。
首先,您只需要将类名传递给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脚本中。祝你好运
试着去掉".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
在触发java命令时使用-cp或-classpath。只输入java
命令即可查看的用法
我也得到了类似的错误。
只需将您的工作目录(在其中您有自己的类)以及运行时类路径中所需的库包括在内。
当机器在运行时找不到.class
文件时(即使它们已经编译过,也就是说它在编译时不会出错,而只是在运行时),就会发生NoCLassDefFoundError
第1步:编译javac-classpath"path/to/lib1:path/to/lib2"yourfile.java第2步:跑步java-classpath"path/to/lib1:path/to/lib2:path/to/your/currentdirectory/where thedoclass/fileare created/"您的文件