2015-12-02 59 views
2

我想在程序中執行另一個Java程序。我參考了here。爲了測試,我粘貼了與接受的答案相同的代碼。我已經通過了一個簡單的HelloWorld程序。程序編譯完美,但給主類找不到錯誤。在另一個程序中運行Java程序會給出錯誤

這裏是我的代碼: Server.java

public static void main(String args[]) { 
    try { 
     runProcess("javac D:\\HelloWorld.java"); 
     runProcess("java D:\\HelloWorld"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

private static void printLines(String name, InputStream ins) throws Exception { 
    String line = null; 
    BufferedReader in = new BufferedReader(
      new InputStreamReader(ins)); 
    while ((line = in.readLine()) != null) { 
     System.out.println(name + " " + line); 
    } 
} 

private static void runProcess(String command) throws Exception { 
    Process pro = Runtime.getRuntime().exec(command); 
    printLines(command + " stdout:", pro.getInputStream()); 
    printLines(command + " stderr:", pro.getErrorStream()); 
    pro.waitFor(); 
    System.out.println(command + " exitValue() " + pro.exitValue()); 
} 

HelloWorld.java:

`public static void main(String args[]){ 
    System.out.println("Hello World!"); 
}` 

輸出: exitValue() 0 for javac stderr: Error: Could not find or load main class D:\HelloWorld exitValue() 1 for java

上編譯和CMD或IDE運行同一程序給出完美輸出。

+0

你能展示你的代碼嗎? – hdost

+1

包中有'HelloWorld'嗎? 另外,你有沒有嘗試自己運行「java D:\\ HelloWorld」命令? – MrHug

+0

你在所謂的路徑中有'.class'文件嗎? 'd:\ HelloWorld' – Yazan

回答

1

你想從HelloWorld類開始main?我認爲,在這種情況下,你應該運行的程序是這樣的:

java -cp 'D:\' HelloWorld 

所以,你需要指定類路徑 - 「d:\」和入門級的名字從類路徑 - 的HelloWorld。

-1

爲什麼要努力去做這件事?使用內聯編譯器API,然後在將類本身加載到根類加載器後,在新類上執行main()方法。

+0

可能是很多原因。從不願意將類加載到相同的類加載器(或者使用類加載器製作一些棘手的東西,例如外部代碼使用與其他版本的依賴關係)到不穩定的外部程序,您不希望在主進程中執行「例如,得到OOM。非常具體的問題與有效的領域,不需要改寫它。 –