2010-11-30 10 views
5

J'ai une application de bureau et quand quelqu'un appuie sur un bouton, je veux qu'elle lance une autre machine virtuelle Java qui exécute la méthode principale d'une classe. Mon application de bureau dépend déjà du fichier jar qui contient la classe avec la méthode principale que je veux exécuter.Exécuter la méthode principale Java à partir d'une application Java dans une JVM différente

Actuellement, j'ai le code suivant, cependant, j'espérais leur était une façon de faire plus élégante:

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

Je sais que je peux utiliser ProcessBuilder aussi.

est-il pas possible, comme (excusez le pseudo-code):

Jvm.execute(Main.class); 

Depuis la classe principale que je veux appeler existe déjà dans mon classpath, il me fait bizarre d'avoir juste pour exécuter la commande java via Runtime.

+1

Et vous ne pouvez pas exécuter cette méthode principale à partir de votre code? – Rogach

+1

Le démarrage d'un nouveau thread d'arrière-plan est-il acceptable pour vous? Dans ce cas, vous pouvez même signaler la fin de la tâche à l'utilisateur. –

+0

Un jvm différent est ce que je veux. – digiarnie

Répondre

0

HSQLDB dispose d'une solution générique permettant d'appeler les méthodes principales pour plusieurs processus différents. Utilisez cette classe pour appeler un processus MainInvoker class source

2

Pourquoi avez-vous besoin d'exécuter cette classe Main dans une autre machine virtuelle Java? Cela ne fait que compliquer les choses.

habituellement juste Main.main (args) sera OK, cependant:

Si vous voulez isoler ce programme à partir de votre programme, il suffit d'exécuter sous un autre classloader - voir URLClassLoader documentation. Notez que même les serveurs d'applications Java complexes ne créent pas beaucoup de processus (généralement, il s'agit d'un seul processus JVM) et isolent les fichiers WAR et EAR déployés uniquement avec les chargeurs de classe. Vous pouvez considérer classloader comme l'équivalent d'un processus de la JVM.

Si un autre programme effectue des opérations 'non sécurisées', utilisez le mécanisme de sécurité Java de java.security et empêchez ce programme d'effectuer ces opérations.

Si un autre programme appelle System.exit() et que cela arrête votre programme, il suffit d'utiliser le mécanisme de sécurité et d'interdire à ce programme d'appeler System.exit() - voir System.exit() Javadoc. Ensuite, vous pouvez juste attraper SecurityException et l'ignorer.

Questions connexes