Java-Ausführungsprozess unter Linux

Ich habe jetzt eine Weile mit diesem Problem zu kämpfen und ich kann es scheinbar nicht beheben. Ich habe bereits verschiedene Ansätze ausprobiert (Runtime.exec (), ProcessBuiler), aber keiner scheint zu funktionieren.

Das ist mein Problem. Ich habe einen Laptop, der immer an ist. Auf diesem Laptop wird ein Java-Tool ausgeführt, das über USB mit einem Arduino verbunden ist, um die Lichter im Haus ein- und auszuschalten. Ich habe dieses Programm selbst erstellt, daher mache ich auch einige regelmäßige Wartungsarbeiten daran. Vor kurzem habe ich eine Schaltfläche zum Neustarten des Programms von meiner HTML-Oberfläche hinzugefügt (falls ich ein Update habe oder aus einem anderen Grund das Programm neu starten muss oder ich beschließe, in naher Zukunft die automatische Aktualisierung zu implementieren).

Diese Idee dahinter besteht darin, eine zweite Instanz der Anwendung von der ersten Instanz aus zu starten und dann die erste Instanz durch System.exit (0) zu beenden.

Aus irgendeinem Grund kann ich keine zweite Instanz der Anwendung starten. Hier ist ein Code.

public void shutdown(boolean restart) {
        if (this.serial != null) {
            this.serial.disconnect();
        }

        if (restart) {
            System.out.println(this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath());
            String startupCommand = "java -jar \"" + this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath().replace("%20", " ") + "\"";
            ProcessBuilder builder = new ProcessBuilder();

//            String[] command = new String[1];
//            command[0] = "-jar \"" + (System.getProperty("user.dir") + "/Home_Automation_Executor.jar") + "\"";
            try {
//                //System.out.println("Restarting Home Automation with command: " + command[0]);
//                System.out.println("Restarting Home Automation with command: " + startupCommand);
//                Runtime.getRuntime().exec("bash");
//                Process proc = Runtime.getRuntime().exec(startupCommand);
                Process proc = builder.command(startupCommand).start();
                InputStream stderr = proc.getErrorStream();
                InputStreamReader isr = new InputStreamReader(stderr);
                BufferedReader br = new BufferedReader(isr);
                String line = null;
                System.out.println("<ERROR>");
                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                }
                System.out.println("</ERROR>");
                int exitVal = 0;
                try {
                    exitVal = proc.waitFor();
                } catch (InterruptedException ex) {
                    Logger.getLogger(Engine.class.getName()).log(Level.SEVERE, null, ex);
                }
                System.out.println("Process exitValue: " + exitVal);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        System.out.println("Terminating Home Automation");
        System.exit(0);
    }

java.io.IOException: Das Programm "java -jar" / Users / NightWalker / Dropbox / Entwicklung / Quellcode / Java / NightWare-Tools / Home Automation / Home Automation Executor / dist / Home_Automation_Executor.jar "" kann nicht ausgeführt werden: error = 2, Keine solche Datei oder kein solches Verzeichnis unter java.lang.ProcessBuilder.start (ProcessBuilder.java:460) unter home.automation.executor.Engine.shutdown (Engine.java:186) unter home.automation.executor.webserver.HTTPGenerator._handleActionCommand ( HTTPGenerator.java:190) zu Hause.automation.executor.webserver.HTTPGenerator._generateHTTPPage (HTTPGenerator.java:165) zu Hause.automation.executor.webserver.HTTPGenerator.getHTTPPage (HTTPGenerator.java:58) zu Hause .webserver.HTTPRequestHandler.run (HTTPRequestHandler.java:160) Auslöser: java.io.IOException: error = 2, Keine solche Datei oder kein solches Verzeichnis unter java.lang.UNIXProcess.forkAndExec (native Methode) unter java.lang.UNIXProcess. (UNIXProcess.java:53) um java.lang.ProcessImpl.start (ProcessImpl.java:91) um java.lang.ProcessBuilder.start (ProcessBuilder.java:453) ) ... 5 weitere

Antworten auf die Frage(2)

Ihre Antwort auf die Frage