使用javac编译时包含Swing

问题描述 投票:0回答:4

我编译并 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

编译仍然很好,运行时仍然崩溃。

java javac
4个回答
2
投票

看起来您正在使用GCJ。这是一个旧项目,试图生成一个纯开源的 Java 实现。

他们已经完成了一半,但实施还远未达到完美。如今,最好完全避免它,而是使用 OpenJDK(或 Oracle/Sun JDK,如果开源不是必需的)。

在 Ubuntu 上,您可以使用

update-java-alternatives
将系统配置为不同的 Java 实现:

sudo update-java-alternatives -s java-6-openjdk

顺便说一句,您永远不需要在类路径上显式指定

rt.jar
,因为它始终自动可用。此外,使用来自 other JVM 的
multiple
rt.jar 会导致灾难。


0
投票

如果运行代码,编译工作正常。 奇怪的是您缺少这个特定的类,因为它是标准库的一部分。在大多数 Java 发行版中,它位于 rt.jar 中


0
投票

您当前的 JDK 路径是什么(在 $PATH 或 %PATH% 中)? 你的整个路径是什么? 您当前的 CLASSPATH 环境变量是什么? 您的问题与运行时环境有关。 您不应将 rt.jar 添加到类路径中。 如果您安装了正确的 JVM,那么 java 不需要 rt.jar 和 tools.jar 的位置。 我怀疑您的 JVM 存在路径问题。

另外,您用来运行程序的命令行是什么?


0
投票

您不需要包含 rt.jar,它由 java vm 的默认类加载器包含。

你需要找出哪个版本的java是默认的:

java --version

如果您运行的是 ubuntu,它很可能是 openjdk java,这很好。如果是gcj,尝试用openjdk或者sun-jdk来运行。

另外,准确显示你如何运行 jar。

© www.soinside.com 2019 - 2024. All rights reserved.