2011-11-13 48 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是主類,否則取代它的名字。)