1

我有一个使用 Swing 构建的 GUI 应用程序和一个名为 GraphStream 的第 3 方图形库(包含 2 个 JAR)。这可能是一个类路径问题,并且独立于库本身。

当我从 Eclipse 运行时,GUI 出现并且没有错误/警告。

但是,当我尝试从命令行运行时,我要么收到 NoClassDefFoundError,要么在加载库时应用程序运行并无限期地“挂起”。这似乎完全是零星的。有时会打印错误,有时 JVM 会挂起。这就是我运行应用程序的方式:

java -verbose -classpath '../lib;.' -cp . bt_sim <args>

这两个 JAR 文件位于“../lib”目录中(并且这是该目录中仅有的两个文件)。而且,我写的类都在“.”中。- 当实际出现错误时,输出如下:

... Other loading output from JVM debug ...
[Loaded java.util.IdentityHashMap$KeySet from C:\Program Files\Java\jre8\lib\rt.jar]
java.lang.NoClassDefFoundError: org/graphstream/graph/Graph
    at bt_sim.main(bt_sim.java:70)
Caused by: java.lang.ClassNotFoundException: org.graphstream.graph.Graph
    at java.net.URLClassLoader$1.run(Unknown Source)

当应用程序挂起时:

...
[Loaded java.util.Formatter$Flags from C:\Program Files\Java\jre8\lib\rt.jar]
[Loaded java.util.Formatter$Conversion from C:\Program Files\Java\jre8\lib\rt.jar]
[Loaded sun.misc.Cleaner from C:\Program Files\Java\jre8\lib\rt.jar]

即使我在 Linux 环境中运行,也会发生同样的错误。在所有情况下,我都使用 JRE 8 运行。在 Eclipse 中,当从命令行运行时,只包含两个 JAR 文件(第 3 方图形依赖项)。JAR 文件位于我上面命令的“lib”目录中。任何关于调查什么的想法都会非常有帮助!

我的解决方案我没有意识到我必须在类路径中明确 包含每个第三方 JAR 。一旦我这样做了,应用程序就会按预期执行:-/

4

1 回答 1

1

请注意-classpath-cp是别名:

$ java -help
    …
    -cp <class search path of directories and zip/jar files>
    -classpath <class search path of directories and zip/jar files>
                  A : separated list of directories, JAR archives,
                  and ZIP archives to search for class files.

我怀疑一个在一起使用时会覆盖另一个。相反,请使用包含平台所需目录和路径分隔符的表单。lib

于 2016-04-12T14:57:03.360 回答