2016-07-20 5 views
0

Ich brauche Parameter senden und Batch-Datei von Java-Code ausführen. Ich habe diese Methode:Batch mit Java-Return-Fehler ausführen

private void run(){ 
     if (atmUsernameField.getText().length() > 0 && 
      atmPasswordField.getText().length() > 0 && 
      serverURLField.getText().length() > 0){ 

      String atmUsername= atmUsernameField.getText(); 
      String atmPassword = atmPasswordField.getText(); 
      String url = serverURLField.getText(); 
      String userHomePath = System.getProperty("user.home"); 
      userHomePath = userHomePath + File.separator + "INFOKIOSK" + File.separator + "device_jar"; 
      String fileName = userHomePath + File.separator + "restart.bat"; 
      if (SystemUtils.IS_OS_WINDOWS_XP || SystemUtils.IS_OS_WINDOWS) { 
       try { 
        String processID = ManagementFactory.getRuntimeMXBean().getName(); 
        int endIndex = processID.indexOf("@"); 
        processID = processID.substring(0, endIndex); 
        new ProcessBuilder("cmd", "/c", "start " + fileName, processID, atmUsername, atmPassword, url).start(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 

dies der Restart.bat ist:

TASKKILL /F /PID %1 /T 
cd /d %~dp0 
java -jar device.jar --atm.autoload.page=%4 --atm.username=%2 --atm.password=%3 -debug 

Restart.bat Notwendigkeit zuerst getötet Prozess, in dem PID = processID und gehen in den Ordner, wo befindet sich er und Laufen device.jar mit Parametern. Wenn ich diesen Code auf Windows 7-Maschine ausführen, funktioniert Code. Wenn auf Windows XP SP3 Maschine läuft Fehler zurückgegeben "Not Found C: \ Dokumente ...." Ich brauche diesen Code auf Windows XP-Rechner ausführen. Wo ist der Fehler, warum funktioniert der Code nicht?

+0

Well ... "hinzufügen Nicht gefunden C: \ Dokumente ... "Es kann Ihre Datei nicht finden. Ihre Datei kann "Dokumente \ Eigene Dateien" sein, aber dieser Platz bedeutet, dass Java sie als "Dokumente \ Meine" sieht. also prüfe den Pfad – Stultuske

+0

@Stultuske Ich habe den Pfad "C: \ Documents" nicht benutzt. Die Datei befindet sich im Verzeichnis: user.home \ INFOKIOSK \ device_jar \ restart.bat. Nur in der alten Version des Artefakts habe ich diesen Pfad benutzt. Vielleicht, was dieser Cache einen Job behindert – Saahon

Antwort

0

userHomePath enthält Leerzeichen auf winXP. Auf Win7 ist es nicht mehr.

Versuchen, Anführungszeichen zu verwenden, wie unten dargestellt, wird es in beiden Umgebungen arbeiten:

new ProcessBuilder("cmd", "/c", "start \"" + fileName + "\"", processID, atmUsername, atmPassword, url).start(); 

Vielleicht müssen Sie Anführungszeichen in Ihrer .bat zu

cd /d "%~dp0" 
+0

Danke, ja, userHomePath in WinXP: "C: \ Dokumente und Einstellungen \ Benutzername \" -> für diese Ausgabe Fehler "Nicht gefunden C: \ Dokumente" – Saahon