0

我有一个java swing代码里面有5个类,主类引用其他四个类,这里​​我也添加了一些jar,我给出以下cmd进行编译,

C:\Users\FSSD\Desktop\FinalAttempt\install\lib>javac WriteHelper.java JavaDemo.j
ava DataBaseHelper.java FileEncryption.java SendEmail.java -cp dnsns.jar;dsn.jar
;imap.jar;javaws.jar;jce.jar;jsse.jar;jxl-2.6.jar;localedata.jar;mail.jar;mailap
i.jar;pop3.jar;rt.jar;smtp.jar;sqlitejdbc-v056.jar;sunjce_provider.jar;sunmscapi
.jar;sunpkcs11.jar;tools.jar JavaSamp.java

这里 JavaSamp 持有 mainclass 其他类是 WriteHelper、JavaDemo、DataBaseHelper、fileEncription 和 SendEmail 类,当我使用上面的 cmd 编译时它编译成功,当我运行这个类时,我有以下异常

C:\Users\FSSD\Desktop\FinalAttempt\install\lib>java WriteHelper.java JavaDemo.ja
va DataBaseHelper.java FileEncryption.java SendEmail.java -cp dnsns.jar;dsn.jar;
imap.jar;javaws.jar;jce.jar;jsse.jar;jxl-2.6.jar;localedata.jar;mail.jar;mailapi
.jar;pop3.jar;rt.jar;smtp.jar;sqlitejdbc-v056.jar;sunjce_provider.jar;sunmscapi.
jar;sunpkcs11.jar;tools.jar JavaSamp
Exception in thread "main" java.lang.NoClassDefFoundError: WriteHelper/java
Caused by: java.lang.ClassNotFoundException: WriteHelper.java
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: WriteHelper.java.  Program will exit.

我该如何克服它,提前谢谢...

4

4 回答 4

3

您不会通过告诉 Java 类代码来运行它。你告诉它运行哪个类。例如:

java -cp .;dnsns.jar;...[... as before ...] com.foo.JavaSamp

假设JavaSamp在一个包中调用了一个类com.foo。请注意,当您编译时,您可能应该使用类似-d .的方法告诉它根据源文件中的包名称将类文件放入以当前目录为根的文件夹结构中。

于 2011-06-21T09:31:49.467 回答
0

要运行 java 文件,您需要指定哪个类文件(以.class扩展名结尾,但您不指定扩展名)以及.jar类路径中提供的其余类和库(带扩展名)。

例如

java WriteHelper -classpath "<directory_where_class_file_exists>;mail.jar/localedata.jar;

要编译文件,请javac改用。您所做的是告诉 javajavaWriteHelper目录(或包)中查找。

于 2011-06-21T09:31:41.280 回答
0

当您运行时,java WriteHelper.java 您是在告诉 Java 在“WriteHelper”包中寻找一个名为“java”的类。它不存在,这就是异常告诉您的内容:

线程“主”java.lang.NoClassDefFoundError 中的异常:WriteHelper/java

将课程运行为java WriteHelper. 该java命令需要一个类名……而不是类文件名。


编译和运行代码的方式还有其他问题。

  • -cp选项及其值必须出现在 Java 源文件的名称 (for javac) 和 Java 类的名称 (for java) 之前。

  • java命令需要一个类名,而不是很多类名。您需要确定哪个类是具有该public static void main(String[] args)方法的类,并将该类(仅)用作java类参数。(我猜想,如果你有一个名为Main那个的类,它有main入口点方法。)

  • 这仅适用于所有类都在默认类中声明的情况。如果源代码以package声明开头,则需要将类组织在目录树中,其组件镜像类包;请参阅@Jon Skeet 的回答。

最后,建议您仔细阅读手册页,java以及javac讨论类路径如何工作的链接页面。一旦你理解了它们,这些东西就不再像黑魔法了。

于 2011-06-21T09:32:57.057 回答
0

您需要将第一步生成的类包含到第二步的类路径中。

于 2011-06-21T09:33:10.363 回答