2013-01-20 49 views
3

我需要編譯外部Java文件(比如a.java)。這是我寫的代碼。爪哇 - NoClassDefFoundError的

(字符串路徑中包含的路徑,Java和類文件)

command[0] = "javac"; 
    command[1] = path+"a.java"; 
    p = Runtime.getRuntime().exec(command);   

上面的代碼似乎工作就好了。但是,下面的代碼

command[0] = "java"; 
    command[1] = "a"; 
    command[2] = "-cp"; 
    command[3] = "."+path+"a"; 
    p = Runtime.getRuntime().exec(command);   
    stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); 
    while ((temp = stdInput.readLine()) != null) result += "\n" + temp; 
    while ((temp = stdError.readLine()) != null) result += "\n" + temp; 

導致以下錯誤

java.lang.NoClassDefFoundError: a 
Exception in thread "main" 

可能有人explaine問題與此代碼。謝謝 !

回答

4

你指定的類名第一,然後在類路徑的參數。類名稱總是最後事情來具體程序參數之前。在你的情況,classpath中的一部分將因此被視爲一種選擇 - 它會被視爲兩個參數(-cp和路徑)和Java程序本身。

所以不是:

java a -cp (whatever) 

你想

java -cp (whatever) a 
+0

我試過 - '命令[0] = 「java的」;'' 命令[1] = 「-cp」 ;' 'command [2] =「。」+ path +「\\ temp \\」;' 'command [3] =「a」;' 但是我仍然收到同樣的錯誤。這個命令是正確的嗎? –

+0

@randomuser:首先嚐試從命令行運行它 - 以這種方式進行實驗會更容易。 * temp目錄中的類文件* –

+0

我得到了同樣的錯誤,當我運行它使用CMD, 我發現有人具有相同的[問題](http://stackoverflow.com/questions/5587585/java-lang-noclassdeffounderror) 似乎有一個類似的命令工作爲了他。 –