2010-01-05 18 views
25

Je voudrais créer un processus dans mon application. Mais après avoir regardé autour et de l'API de Java, je ne comprends toujours pas.Comment créer un processus en Java

Fondamentalement, je veux créer une application multi-processus. Mais le nouveau processus est une classe dans mon application.

Je sais que certains d'entre vous pourraient demander pourquoi ne pas créer un fil de discussion? Parce que la classe appelle un code Matlab, le problème et la classe Java est Here

Existe-t-il un exemple de code ou un didacticiel que vous pouvez recommander? Merci.

+2

Notez que la réponse que vous avez liée ne * indique * pas que vous avez besoin d'un processus séparé. Vous pouvez utiliser un thread, vous devez juste vous assurer que vous utilisez uniquement MATLAB à partir d'un thread. – sleske

+0

Eh bien, ça ne marche pas pour moi. Avez-vous lu le lien que j'ai posté sur ce sujet? D'après ce que j'ai interprété à partir de l'article, j'ai vraiment besoin d'un processus. À moins que vous ne puissiez me diriger dans la bonne direction. –

Répondre

15

Il n'y a qu'une seule façon de créer des processus en Java, Runtime.exec() - fondamentalement, cela vous permet de démarrer une nouvelle machine virtuelle Java comme vous le feriez via l'interface de ligne de commande.

+0

Donc, cela signifie que je dois compiler le code comme une application distincte et l'appeler? –

+6

Il vous permet de démarrer n'importe quel processus système, pas seulement une nouvelle JVM, à moins que ce ne soit le nouveau processus que vous souhaitez démarrer. – Dave

+0

@Dave: Oui, bien sûr. –

23

Peut-être java.lang.Process pourrait aider ici ..

Les méthodes ProcessBuilder.start() et Runtime.exec créer un processus natif et retourner une instance d'une sous-classe de processus qui peut être utilisé pour contrôler le processus et obtenir des informations à ce sujet. La classe Process fournit des méthodes pour effectuer des entrées à partir du processus, exécuter des sorties dans le processus, attendre que le processus se termine, vérifier le statut de sortie du processus et détruire (tuer) le processus.

+0

Sa question n'est pas sur java.lang.Process mais comment écrire une application qui peut se cloner. –

+6

@Aaron: Qu'est-ce qui vous fait croire que l'affiche veut que l'application se "clone"? Et qu'est-ce que ça veut dire? Quelque chose comme fork() dans Unix? – sleske

+0

@sleske: Aaron a presque raison, je veux lancer une classe dans mon code comme un processus tandis que le reste des classes est un autre processus. Dans un certain sens, sa fourche(). –

4

Je suppose que vous savez comment créer un nouveau processus. Si ce n'est pas le cas, voir here ou here.

Vous devez maintenant exécuter java.exe avec votre chemin de classe actuel. Vous pouvez trouver ce classpath dans la propriété System java.class.path. Pour localiser java.exe, regardez new File(System.getProperty("java.home"), "bin").

Si vous avez des problèmes avec cette approche, je suggère d'écrire un script wrapper et de l'appeler avec suffisamment d'arguments pour que le code main() puisse décider de la classe à invoquer.

+0

La propriété système java.class.path ne contient pas java.exe, vous voulez probablement dire java.home/bin. –

+0

@ AndreasÅgren: Le texte était correct mais déroutant. L'a amélioré. –

+0

Ok, ça a l'air bien. –

6

Si vous voulez plus de contrôle à grains fins, vous pouvez utiliser ProcessBuilder - cette classe vous permet de définir des variables d'environnement et de configurer les tuyaux du projet (stdout, in, err).

Une fois que vous avez configuré, vous pouvez appeler ProcessBuilder#start() autant de fois que vous le souhaitez afin de créer de nouveaux processus (il renvoie une instance de Process). Vous pouvez modifier la configuration pour les nouveaux processus entre ces appels à start().

0

Ma recommandation est de jeter un oeil à ZT-exec: https://github.com/zeroturnaround/zt-exec

enveloppa java.lang.ProcessBuilder et et Apache Commons Exec, et pourrait facilement gérer le cycle de vie des processus.

Questions connexes