使用javac编译时包括Swing

使用javac编译时包括Swing,java,compiler-construction,javac,Java,Compiler Construction,Javac,我对源代码进行编译和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/jav

我对源代码进行编译和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发行版中,这是在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或sunjdk运行它


另外,准确地显示您是如何运行jar的。

它看起来像您正在使用的。这是一个试图将Java实现作为纯开源的老项目

他们做了一半,但实施还远远不够完美。现在,最好完全避免使用它,而是使用(或者,如果不需要开源的话)

在Ubuntu上,您可以将系统配置为不同的Java实现:

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

顺便说一下,您永远不需要在类路径上显式地指定
rt.jar
,因为它总是自动可用的。另外,使用来自不同JVM的多个
rt.jar
会导致灾难。

如果它编译了,但没有运行,我们需要知道你是如何运行应用程序的(而不是如何编译)。ad
rt.jar
:“它包含在你的JRE/JDK中”更正确。
readlink-f$(哪个java)
也可能有助于查明您使用的是哪种java二进制文件。+1-除非有“政治原因”,否则我不会使用GCJ。。。最后期限并不重要。@Stephen C:gcj和gnu classpath通过构建第一个“干净”的IcedTea/OpenJDK版本达到了他们的目的。我认为这些项目应该得到一些认可:)@tulskiy:他们确实做到了,他们确实做到了。这并没有改变我不会将它们用作高效Java环境的事实。@tulskly-此外,我们应该注意gcj和gnu类路径在促使Sun创建OpenJDK中所起的作用。然而,@Joachim所说的也是事实。它们在技术上处于劣势,使用它们会增加重大风险。