Proceso de ejecución de Java en Linux

He estado luchando por un tiempo con este problema y parece que no puedo solucionarlo. Ya he probado diferentes enfoques (Runtime.exec (), ProcessBuiler) pero ninguno parece funcionar.

Este es mi problema. Tengo un portátil que siempre está encendido. Este portátil ejecuta una herramienta java conectada a un arduino a través de usb para encender y apagar las luces de la casa. He creado este programa yo mismo, por lo tanto, también estoy haciendo un trabajo de mantenimiento regular. Recientemente, he agregado un botón para reiniciar el programa desde mi interfaz html (en caso de que tenga una actualización, o si por alguna otra razón podría necesitar reiniciar el programa o decido implementar la actualización automática en un futuro próximo).

Esta idea detrás de esto es iniciar una segunda instancia de la aplicación desde la primera instancia y luego System.exit (0) la primera instancia.

Por alguna razón, no puedo iniciar una segunda instancia de la aplicación. Aquí hay un código.

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: No se puede ejecutar el programa "java -jar" / Usuarios / NightWalker / Dropbox / Desarrollo / Código fuente / Java / NightWare Tools / Home Automation / Home Automation Executor / dist / Home_Automation_Executor.jar "": error = 2 No existe tal archivo o directorio en java.lang.ProcessBuilder.start (ProcessBuilder.java:460) en home.automation.executor.Engine.shutdown (Engine.java:186) en home.automation.executor.webserver.HTTPGenerator._handleActionCommand HTTPGenerator.java:190) en home.automation.executor.webserver.HTTPGenerator._generateHTTPPage (HTTPGenerator.java:165) en home.automation.p.P.P.P.P.P.P. .webserver.HTTPRequestHandler.run (HTTPRequestHandler.java:160) Causado por: java.io.IOException: error = 2, No existe tal archivo o directorio en java.lang.UNIXProcess.forkAndExec (Método nativo) en java.lang.UNIXProcess. (UNIXProcess.java:53) en java.lang.ProcessImpl.start (ProcessImpl.java:91) en java.lang.ProcessBuilder.start (ProcessBuilder.java:453 ) ... 5 más

Respuestas a la pregunta(2)

Su respuesta a la pregunta