2010-01-21 60 views
0

我正在研究一個java程序,因爲它使用單獨的JRE,所以我必須使用進程生成器調用另一個java程序。Process Builder Issue

下面是批處理程序調用該程序,並正常工作:

cd C:\apps\Project_name\bin\ 
C:\Progra~1\Java\jre1.6.0_03\bin\java -Xms512m -Xmx1024m 
    -cp ../lib/spring-1.2.2.jar;../lib/log4j-1.2.8.jar;../lib/commons-logging-1.0.4.jar;../lib/wrapper.jar 
    com.project.main.MainProgramLauncher arg1 arg2 

現在,我宣佈我的代碼是這樣的:

ProcessBuilder builder = new ProcessBuilder(
    "java", 
    "-Xms512m", 
    "-Xmx1024m", 
    "-cp ../lib/spring-1.2.2.jar;../lib/log4j-1.2.8.jar;"+ 
    "../lib/commons-logging-1.0.4.jar;../lib/wrapper.jar", 
    "com.project.main.MainProgramLauncher arg1 arg2 ...argN" 
); 
Map<String, String> environment = builder.environment(); 

environment.put("path", ";"); // Clearing the path variable; 
environment.put("path", java_bin_location+";"); 
Process javap = builder.start(); 
InputStreamReader tempReader = new InputStreamReader(
    new BufferedInputStream(javap.getInputStream()) 
); 
BufferedReader reader = new BufferedReader(tempReader); 
while (true) { 
    String line = reader.readLine(); 
    if (line == null) 
     break; 
    System.out.println(line); 
} 

但它不執行的事情應該是這樣。程序馬上崩潰。有什麼不同,我應該做的?請建議。

+0

(我在格式化時已經打斷了一些行,這會讓我們更容易看到發生了什麼。) – 2010-01-21 02:38:37

回答

1

我猜你應該讓你的類名和參數不同的字符串。而不是:

"java", 
"-Xms512m", 
"-Xmx1024m", 
"-cp ../lib/spring-1.2.2.jar;../lib/log4j-1.2.8.jar;"+ 
"../lib/commons-logging-1.0.4.jar;../lib/wrapper.jar", 
"com.project.main.MainProgramLauncher arg1 arg2 ...argN" 

應該

"java", 
"-Xms512m", 
"-Xmx1024m", 
"-cp", 
"../lib/spring-1.2.2.jar;../lib/log4j-1.2.8.jar;"+ 
"../lib/commons-logging-1.0.4.jar;../lib/wrapper.jar", 
"com.project.main.MainProgramLauncher", 
"arg1", 
"arg2", 
... 
"argN" 

您所使用的全路徑名來調用java.exe,但不是當你使用ProcessBuilder其他引人注目的事情。

您可能還想要讀取錯誤流(或致電redirectErrorStream(true) - 參數非常重要(!))。