我编译并 jar 源代码很好,但是当我运行它时,它会抱怨:
java.lang.ClassNotFoundException: javax.swing.JPanel
我想我必须在编译时包含 Swing 库,但是我该怎么做?
我在我的系统上包含了每个 rt.jar:
javac -classpath /usr/lib/jvm/java-1.5.0-gcj-4.4/jre/lib/rt.jar:/usr/lib/jvm/java-6-sun-1.6.0.20/jre/lib/rt.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar:/home/me/equinox.jar *java
编译仍然很好,运行时仍然崩溃。
看起来您正在使用GCJ。这是一个旧项目,试图生成一个纯开源的 Java 实现。
他们已经完成了一半,但实施还远未达到完美。如今,最好完全避免它,而是使用 OpenJDK(或 Oracle/Sun JDK,如果开源不是必需的)。
update-java-alternatives
将系统配置为不同的 Java 实现:
sudo update-java-alternatives -s java-6-openjdk
顺便说一句,您永远不需要在类路径上显式指定
rt.jar
,因为它始终自动可用。此外,使用来自 other JVM 的 multiple
rt.jar
会导致灾难。
如果运行代码,编译工作正常。 奇怪的是您缺少这个特定的类,因为它是标准库的一部分。在大多数 Java 发行版中,它位于 rt.jar 中
您当前的 JDK 路径是什么(在 $PATH 或 %PATH% 中)? 你的整个路径是什么? 您当前的 CLASSPATH 环境变量是什么? 您的问题与运行时环境有关。 您不应将 rt.jar 添加到类路径中。 如果您安装了正确的 JVM,那么 java 不需要 rt.jar 和 tools.jar 的位置。 我怀疑您的 JVM 存在路径问题。
另外,您用来运行程序的命令行是什么?
您不需要包含 rt.jar,它由 java vm 的默认类加载器包含。
你需要找出哪个版本的java是默认的:
java --version
如果您运行的是 ubuntu,它很可能是 openjdk java,这很好。如果是gcj,尝试用openjdk或者sun-jdk来运行。
另外,准确显示你如何运行 jar。