2011-11-13 36 views
2

该程序是用2个文件filter.java编写的 - 其中main函数和ClasifiedWord.java是只有容器类。我在eclipse上的窗口上写了这个,但是想在Linux的javac编译器上编译它。Javac编译和执行2个java文件

javac filter.java ClasifiedWord.java 

运行没有错误,但是当我尝试运行程序:

snowy:Filter$ java filter 
Exception in thread "main" java.lang.NoClassDefFoundError: filter 
Caused by: java.lang.ClassNotFoundException: filter 
    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:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
Could not find the main class: filter. Program will exit. 
snowy:Filter$ javac filter.java ClasifiedWord.java 
snowy:Filter$ java filter ClasifiedWord 
Exception in thread "main" java.lang.NoClassDefFoundError: filter 
Caused by: java.lang.ClassNotFoundException: filter 
    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:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
Could not find the main class: filter. Program will exit. 

如何运行该程序?看起来编译好了。我怀疑,也许我在程序中犯了一个错误的文件路径......但我认为情况并非如此? 感谢您的回答!

+3

被自动添加到类路径中的当前目录?如果没有,运行'java -classpath。过滤器“可能有帮助。 –

+0

拼写注释:您的班级可能应该被命名为'ClassifiedWord'(有两个's')。 –

回答

1

罗兰是正确的评论,你应该能够运行它与java -classpath <folderContainingDotClassFiles> filter。另外,您应该将filter.java更改为Filter.java,因为类名(包含它们的文件)的标准Java约定是首字母大写。

1

这看起来像你有一个错误的CLASSPATH设置(通常你根本不需要这个设置,但是如果你有它,它应该包括.在列表中,当前目录),或者你正在使用包(错误地)或两者。有关类路径问题,请参阅其他答案。

如果您使用的是软件包,即您的文件在开头处包含package ...;行,则应根据软件包结构将源文件放入目录结构中。例如,如果您有package example;,则应该在当前目录中有一个example目录,并且在这两个源文件中。

然后调用编译器和解释是这样的:

javac example/filter.java example/ClasifiedWord.java 
java example.filter 

(这里假定filter是主类,否则取代它的名字。)