我有一个使用 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 。一旦我这样做了,应用程序就会按预期执行:-/