2010-09-10 4 views
5

I Batch-Datei namens run.bat, die den folgenden Code inlcudes:Problem eine Batch-Datei in einer Java-Anwendung ausgeführt wird

@echo off 
REM bat windows script 
set CXF_HOME=.\lib\apache-cxf-2.2.7 
java -Djava.util.logging.config.file=%CXF_HOME%\logging.properties -jar archiveServer-0.1.jar 

Wenn ich diese Datei auf einer Befehlszeile ausführen es perfekt funktioniert. Jedoch wenn ich versuche, innerhalb einer Java-Datei mit der folgenden Anweisung auszuführen:

File path = new File("C:/Documents and Settings/Zatko/My Documents/Project-workspace/IUG/external/application/archive");  

Runtime.getRuntime().exec(new String[]{"cmd.exe", "/C", "start", "run.bat"}, new String[]{}, path); 

ich die folgende Fehlermeldung im Terminal Fenster:

'java' is not recognized as internal or external command, operable program or batch file. 

Wo der Fehler sein kann?

Antwort

1

Ich nehme an, Sie haben nicht zu Ihrer Umgebungsvariablen PATH hinzugefügt.

+0

Wie machst du es? – Anto

+0

Der Wert C: \ Programme \ Java \ jdk1.6.0_18 \ bin; ist in der PATH-Variablen enthalten – Anto

+0

Versuchen Sie, C: \ Programme \ Java \ jdk1.6.0_18 \ bin vor Java in Ihrer Batchdatei hinzuzufügen. Eine sauberere Methode könnte die Verwendung von Runtime.getRuntime() .exec() mit zwei Parametern in der angegebenen Umgebung sein. – stacker

2

Java.exe wurde nicht in Ihrem PATH gefunden.

Wenn Sie, dass die Variable JAVA_HOME definiert annehmen kann, können Sie Ihre Batch-Datei ändern:

%JAVA_HOME%\bin\java -Djava.util.logging.config.file=%CXF_HOME%\logging.properties -jar archiveServer-0.1.jar 

Ein besserer Weg, es zu tun wäre, wie staker, schlug enthalten die Umgebungsvariable PATH festlegen zu % JDK_HOME% \ bin

File workingDirectory = new File("C:/Documents and Settings/Zatko/My Documents/Project-workspace/IUG/external/application/archive");  
String javaProgram = System.getProperty("java.home") + "\bin"; 
String[] command = {"cmd.exe", "/C", "start", "run.bat"}; 
String[] environment = {"PATH=" + javaProgram}; 
Process process = Runtime.getRuntime().exec(command, environment, workingDirectory); 

Als dritte Option können Sie auch direkt durch Aufruf der Hauptklasse der jar die Batch-Datei haben, vermeiden. Ihr Archivserver würde jedoch in demselben Prozess ausgeführt werden. Vielleicht willst du das nicht.

+0

+1 Ich habe einige kleinere Tippfehler korrigiert, bitte rollback, wenn du nicht einverstanden bist. – stacker

+0

@stapler Danke. Ich habe gerade das workingDirectory hinzugefügt, wie im Code der Frage angegeben. – gawi

Verwandte Themen