Runtime.exec() verursacht auf manchen Systemen Probleme - Ursache unklar

Master1991

Mitglied
Hi,

folgender Quellcode (Die Alerts sind nur für Debugging zwecke reinkopiert)

Java:
private void upload() {
        try {
            Process process = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/C ", batchDataFile});
            try {
                process.waitFor();
                //new File(sourceCodeFile).delete();
                //new File(batchDataFile).delete();
                //new File(sourceCodeFolder).delete();
                process.destroy();
                 //Create an Alert (Supportet since JDK8u40)
            Alert alert = new Alert(Alert.AlertType.ERROR);
            //Disable Header Text
            alert.setHeaderText(null);
            //Disable OS frame
            alert.initStyle(StageStyle.UNDECORATED);
            alert.setContentText(
                    "ausgeführt"
            );
            alert.showAndWait();
            } catch (InterruptedException ex) {
                Logger.getLogger(ArduinoCompiler.class.getName()).log(Level.SEVERE, null, ex);
                //Create an Alert (Supportet since JDK8u40)
            Alert alert = new Alert(Alert.AlertType.ERROR);
            //Disable Header Text
            alert.setHeaderText(null);
            //Disable OS frame
            alert.initStyle(StageStyle.UNDECORATED);
            alert.setContentText(
                    "Error catch innen"
            );
            alert.showAndWait();
            }
        } catch (IOException ie) {
            //Create an Alert (Supportet since JDK8u40)
            Alert alert = new Alert(Alert.AlertType.ERROR);
            //Disable Header Text
            alert.setHeaderText(null);
            //Disable OS frame
            alert.initStyle(StageStyle.UNDECORATED);
            alert.setContentText(
                    "error catch aussen"
            );
            alert.showAndWait();
        }
    }

So das Problem ist nun das das BatchFile was ausgeführt werden soll, auf meinem Laptop funktioniert (aus der App heraus) und bei dem Laptop eines Kollegen nicht. (Das Batch ansich funktioniert jedoch das wurde getestet) Selbigs gilt für eine VM auf dem selben Rechner, aus der App startet das Skript nicht, beim direktaufruf schon.

Es wird jedoch das Alert mit dem "Ausgeführt" Text aufgerufen. Die App/Methode wirft also kein Exception, dennoch führt sie nur auf einem Laptop das Skript aus.

Ich bin ratlos hoffe auf anregungen

Ps.: Das Batchskript ist zur interaktion mit dem arduino microcontroller und funktioniert wie gesagt beim direkten öffnen ohne probleme
 
Zuletzt bearbeitet:
Hat sich erledigt ... der cd Befehl im Batch skript wechselt nicht automatisch das laufwerk, da die app auf laufwerk e lief und das skript dort gestartet wurde konnte er nicht in den korrekten pfad wechseln. Deshalb funktionierte das skript jedoch dennoch beim manuel starten da der temp order (wo das skript erstellt wird) schon auf laufwerk c ist -.- Das hat zeit und nerven gekostet
 
Allerdings ist dein Prozessaufruf gefährlich. Wenn das Batch-Skript zu viele Ausgaben nach stdout oder stderr schreibt, blockiert dein Programm. Das liegt daran, dass Java diese beiden in Streams fasst - und deren Puffer laufen voll. Man braucht einen nebenläufigen Thread, der die Puffer schön leert, während das Hauptprogramm mit .waitFor() auf das Ende wartet...

PS: Bei älteren Java-Versionen waren die Puffer wohl 64kB groß. Ob das bei Java7/8 auch noch so ist ~ ausprobieren...
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben