2010-01-21 10 views
0

Je travaille sur un programme Java dans lequel je dois appeler un autre programme Java en utilisant le générateur de processus car il utilise un environnement d'exécution Java distinct.Process Builder Problème

est le programme batch ici qui appelle ce programme et fonctionne correctement:

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 

Maintenant, je déclare mon quelque chose comme code ceci:

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); 
} 

Mais ce ne est pas l'exécution de la façon dont il devrait être. Le programme plante tout de suite. Y a-t-il quelque chose de différent que je devrais faire? Veuillez suggérer.

+0

(J'ai cassé certaines lignes pendant le formatage, ce qui devrait permettre de voir plus facilement ce qui se passe.) –

Répondre

1

Je devine que vous devriez faire votre nom de classe et paramètres différentes chaînes. au lieu de:

"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" 

Il devrait être

"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" 

L'autre chose remarquable que vous avez utilisé le nom de chemin complet pour appeler java.exe, mais pas lorsque vous utilisez ProcessBuilder.

Vous pouvez également lire le flux d'erreurs (ou appeler le redirectErrorStream(true) - l'argument est important (!)).