无法从命令中偶尔执行 Java GUI
Unable to execute Java GUI from command like sporatically
我有一个使用 Swing 构建的 GUI 应用程序和一个名为 GraphStream 的第 3 方图形库(包含 2 个 JAR)。这可能是类路径问题,与库本身无关。
当我从 Eclipse 运行 时,出现了 GUI,但没有 errors/warnings。
但是,当我尝试从命令行 运行 时,我要么收到 NoClassDefFoundError,要么在加载库时应用程序 运行s 和 "hangs" 无限期地收到。这似乎完全是零星的。有时会打印错误,有时 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.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 中,当从命令行 运行ning 时,只包含两个 JAR 文件(第 3 方图形依赖项)。 JAR 文件位于我上面命令中的 "lib" 目录中。关于调查内容的任何想法都将非常有帮助!
我的解决方案
我没有意识到我必须在类路径 显式 中包含每个第三方 JAR。一旦我这样做了,应用程序就会按预期执行:-/
注意-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
目录和路径分隔符的 form。
我有一个使用 Swing 构建的 GUI 应用程序和一个名为 GraphStream 的第 3 方图形库(包含 2 个 JAR)。这可能是类路径问题,与库本身无关。
当我从 Eclipse 运行 时,出现了 GUI,但没有 errors/warnings。
但是,当我尝试从命令行 运行 时,我要么收到 NoClassDefFoundError,要么在加载库时应用程序 运行s 和 "hangs" 无限期地收到。这似乎完全是零星的。有时会打印错误,有时 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.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 中,当从命令行 运行ning 时,只包含两个 JAR 文件(第 3 方图形依赖项)。 JAR 文件位于我上面命令中的 "lib" 目录中。关于调查内容的任何想法都将非常有帮助!
我的解决方案 我没有意识到我必须在类路径 显式 中包含每个第三方 JAR。一旦我这样做了,应用程序就会按预期执行:-/
注意-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
目录和路径分隔符的 form。