我有一个java swing代码在那里有5个类,Main Class引用其他四个类,这里我也添加了一些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.
我如何克服它,提前谢谢...
答案 0 :(得分:3)
您不要通过告诉它有关源代码来运行Java类。你告诉它要运行哪个类。例如:
java -cp .;dnsns.jar;...[... as before ...] com.foo.JavaSamp
假设JavaSamp
包中有一个名为com.foo
的类。请注意,在编译时,您应该使用-d .
之类的东西来告诉它根据源文件中的包名称将类文件放入根目录在当前目录中的文件夹结构中。
答案 1 :(得分:0)
要运行java文件,请指定哪个类文件(以.class
扩展名结尾但未指定扩展名)以及其他类和库(包含类路径中提供了.jar
扩展名。
e.g。
java WriteHelper -classpath "<directory_where_class_file_exists>;mail.jar/localedata.jar;
要编译文件,请改用javac
。你做的是你告诉java在java
目录(或包)中寻找WriteHelper
。
答案 2 :(得分:0)
当你运行java WriteHelper.java
时,你告诉Java在“WriteHelper”包中寻找一个名为“java”的类。它不存在,这就是异常告诉你的时间:
线程“main”中的异常java.lang.NoClassDefFoundError: WriteHelper / java
将课程设为java WriteHelper
。 java
命令需要类名...而不是类文件名。
编译和运行代码的方式还有其他问题。
-cp
选项及其值必须出现在Java源文件(用于javac
)的名称和Java类的名称(用于java
)之前。
java
命令需要一个类名,而不是许多类名。您需要确定哪个类是public static void main(String[] args)
方法的类,并使用该类(仅)作为java
类参数。 (我猜,如果你有一个名为Main
的类具有main
入口点方法。)
只有在默认类中声明了所有类时,这才有效。如果源代码以package
声明开头,则需要在目录树中组织类,其组件镜像类包;请参阅@Jon Skeet的回答。
最后,建议您仔细阅读java
和javac
的手册页,以及讨论类路径如何工作的链接页面。一旦你理解了它们,这些东西就不再是黑魔法了。
答案 3 :(得分:0)
您需要在第二步中将第一步中生成的类包含在类路径中。