2011-11-23 27 views
5

Estoy haciendo una función de actualización para mi proyecto, está funcionando bien, hasta que quiero que se reinicie, básicamente descargo el nuevo archivo y lo reemplazo por el anterior, y entonces yo quiero correr de nuevo, ahora por alguna razón no se ejecuta WNA, y no consigo ningún error ...¿Cómo puedo ejecutar un archivo .jar en java

Aquí es la clase de actualización completa: http://dl.dropbox.com/u/38414202/Update.txt

Aquí es el método que estoy usando para ejecutar mi archivo .jar:

String currDir = new File("(CoN).jar").getAbsolutePath(); 
Process runManager = Runtime.getRuntime().exec("java -jar " + currDir); 
+0

lo que se espera para después o durante la ejecución de este frasco? – maks

+0

¿Espera poder salir del proceso actual de Java y reemplazarlo por el que acaba de iniciar? No estoy seguro de que sea posible debido a las restricciones de E/S que Sun menciona en la clase Process. –

+0

Sin embargo, he visto muchas aplicaciones Java "auto-update", por lo que debe haber algún diseño recomendado para ello. –

Respuesta

0

Aquí nadie parecía ayudarme, así que fui a preguntarle a mi amigo y lo tenía casi justo. Abiously requirió que la secuencia sea una matriz.

solución:

String[] cmd = {"java", "-jar", currDir}; 
try { 
    Runtime.getRuntime().exec(cmd); 
} catch (IOException e1) { 
    e1.printStackTrace(); 
} 
0

El JavaDocs para la clase Process señalan específicamente que si no captura la secuencia de salida del Proceso y lo lee rápidamente, el proceso podría detenerse. Si este es el caso, entonces no verías el proceso que comenzaste a ejecutar.

0

Yo creo que hay que capturar el stream así:

BufferedReader stdInput = new BufferedReader(new InputStreamReader(runManager.getInputStream()),8*1024); 

BufferedReader stdError = new BufferedReader(new InputStreamReader(runManager.getErrorStream())); 

// read the output from the command 

String s = null; 
System.out.println("Here is the standard output of the command:\n"); 
while ((s = stdInput.readLine()) != null) { 
System.out.println(s); 
    } 
+0

No estoy seguro de que la gente me entendiera, dije que todo funciona bien, hasta que cuando lo ejecute de nuevo ... ¿por qué necesitaría el flujo de entrada? todo lo que haré es ejecutar el .jar después de que lo haya reemplazado, –

+0

@Wiggyboy ¿Su nuevo archivo jar da alguna salida cuando se ejecuta? –

1

No es claro para mí, ¿por qué necesita para ejecutar el frasco con una llamada a exec(). Dado que necesita ejecutar el código en el archivo .jar desde un programa Java, simplemente puede ejecutar el método main() como se define en el manifiesto del jar, y capturar su salida, donde sea que se encuentre.

El uso de exec() es correcto cuando necesita llamar a un programa desde el sistema operativo subyacente, pero hay formas más sencillas de hacerlo si tanto el llamante como el destinatario son programas Java.

Ahora, si su frasco va a cambiar de forma dinámica y que necesita para actualizar su programa de acuerdo a un nuevo frasco, existen mecanismos para la recarga de su contenido, por ejemplo, echar un vistazo ath este otro post.

Cuestiones relacionadas