Java iniciando otra aplicación Java

Estoy en el proceso de construir una jarra de envoltura para una jarra que construí. Se encargará de actualizar la aplicación principal y asegurarse de que los usuarios sean usuarios válidos. Sin embargo, tengo un problema importante porque no puedo hacer que funcione la función de inicio del jar externo. Esto es lo que tengo hasta ahora:

ProcessBuilder builder = new ProcessBuilder("java -jar ~/Documents.Java/myJar.jar");
try {
    Process process = builder.start();
} catch (Exception e) {
    e.printStackTrace();
}

Sin embargo, acabo de recibir una excepción de archivo no encontrado.

java.io.IOException: Cannot run program "java -jar ~/Documents/Java/myJar.jar": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at com.mycompany.DHSLauncher.Launcher.lambda$4(Launcher.java:109)
at java.util.Optional.ifPresent(Optional.java:159)
at com.mycompany.DHSLauncher.Launcher.showLogin(Launcher.java:102)
at com.mycompany.DHSLauncher.Launcher.start(Launcher.java:35)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)

Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:248)
at java.lang.ProcessImpl.start(ProcessImpl.java:134)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 10 more

Si lo copio java -jar ~/Documents.Java/myJar.jary lo pego directamente en la terminal, funciona y se inicia el jar. No tengo idea de lo que está pasando aquí. ¿Se supone que la ruta es relativa a la ubicación del jar en ejecución?

Respuesta 1

Near dupe Java ejecuta el proceso en Linux y la diferencia entre ProcessBuilder y Runtime.exec ()

Además de los puntos correctos sobre tilde- (no) expansión, está pasando una línea de comando completa como un argumento para new ProcesssBuilder. A diferencia de lo Runtime.exec()que trata a un solo Stringcomo un caso especial y se divide en tokens delimitados por espacios en blanco en su mayoría (pero no exactamente) como los shells típicos de Unix, el ProcessBuilderctor no hace esto. Esto se puede ver en el mensaje de excepción al comienzo del rastreo que publicó. Necesita argumentos separados como:

ProcessBuilder builder = new ProcessBuilder("java", "-jar", 
    System.getProperty("user.home")+"/Documents.Java/myJar.jar");
// three String's passed to vararg, compiler makes array for you

o posiblemente (pero no lo recomiendo)

String line = "java -jar " + System.getProperty("user.home")+"/Documents.Java/myJar.jar";
ProcessBuilder builder = new ProcessBuilder( line.split(" ") );
// array of three String's passed directly to vararg

Y reemplácelo javapor un nombre de ruta completo si el javaprograma deseado (o un enlace a él) no se encuentra primero al buscar la RUTA en efecto para su proceso JVM.

Respuesta: 2

La expansión de Tilde (la principal ~) es una característica del shell. No estás invocando Java a través de un shell, por lo que eso no está sucediendo. Use el System.getProperty("user.home")método para encontrar el directorio de inicio del usuario y compile el comando usando eso en lugar de tilde.

Respuesta: 3

Tengo un servidor Tomcat 7 que recibe muchas solicitudes GET. Esto funciona muy bien durante algún tiempo, y de repente deja de funcionar (después de 7-8 horas). Cuando deja de funcionar, recibo este error: ...

Estoy trabajando en un proyecto nativo de Android (Java) probando en un dispositivo físico con Android 4.4.2. Mi websocket OkHttpClient se conecta pero agota el tiempo de espera después de 10 segundos, esto es lo que estoy tratando de usar para ...

Entonces, encontré una palabra en un documento e imprimí la línea en la que la palabra está presente así: digamos que el archivo de ejemplo contiene: "El rápido zorro marrón salta sobre el perro perezoso. A los Jackdaws les encanta mi gran esfinge de ...

¿Cómo puedo crear un ViewPager personalizado? Para crear una instancia de una página en ViewPager es algo como esto: public Object instantiateItem (Ver colección, posición int) {...