从依赖外部库的终端运行java



我读了很多书,但还没能找到解决方案。

我使用的是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中运行得非常好,所以我真的不明白这里发生了什么。

首先,您只需要将类名传递给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/"您的文件

最新更新