2010-11-30 42 views
5

Tengo una aplicación de escritorio y cuando alguien presiona un botón, quiero que inicie otra JVM que ejecute el método principal de una clase. Mi aplicación de escritorio ya depende del jar que contiene la clase con el método principal que quiero ejecutar.Ejecutar el método principal de Java desde una aplicación de escritorio Java en una JVM diferente

He actualmente tiene el código siguiente, sin embargo, esperaba que su era una forma más elegante de hacer esto:

Runtime runtime = Runtime.getRuntime(); 
Process process = runtime.exec("java -jar another.jar"); 

Sé que puedo utilizar ProcessBuilder también.

¿No hay manera como (con perdón del pseudocódigo):

Jvm.execute(Main.class); 

Puesto que la clase principal que quiero llamar ya existe en mi ruta de clases, sólo se siente raro tener que ejecutar el comando java a través de Runtime.

+1

¿Y no puede ejecutar ese método principal desde su código? – Rogach

+1

¿Es aceptable para usted iniciar un nuevo hilo de fondo? En ese caso, incluso podría informar el final de la tarea al usuario. –

+0

Un jvm diferente es lo que quiero. – digiarnie

Respuesta

0

HSQLDB tiene una solución genérica para invocar los métodos principales para múltiples procesos diferentes. Utilice esta clase para invocar cualquier proceso MainInvoker class source

2

¿Por qué necesita ejecutar esta clase principal en otra JVM? Solo complica las cosas.

por lo general sólo Main.main (args) va a estar bien, sin embargo:

Si desea aislar ese programa desde el programa, basta con ejecutar el programa bajo otro cargador de clases - ver URLClassLoader documentación. Tenga en cuenta que incluso los servidores de aplicaciones Java complejos no crean muchos procesos (por lo general, es solo un proceso de JVM) y aíslan los WAR y EAR implementados con solo cargadores de clases. Puede pensar en el cargador de clases como el proceso equivalente de JVM.

Si ese otro programa realiza algunas operaciones 'inseguras', use el mecanismo de seguridad de Java de java.security y evite que ese programa realice esas operaciones.

Si ese otro programa llama a System.exit() y detiene su programa, es suficiente usar el mecanismo de seguridad y prohibir que el programa llame a System.exit() - vea System.exit() Javadoc. Entonces solo puedes atrapar SecurityException e ignorarlo.

Cuestiones relacionadas