2010-01-05 17 views
25

Vorrei creare un processo nella mia applicazione. Ma dopo aver guardato intorno e dall'API di Java, non riesco ancora a capirlo.Come creare un processo in Java

Fondamentalmente voglio creare un'applicazione multi processo. Ma il nuovo processo è una classe nella mia applicazione.

So che alcuni di voi potrebbero chiedere perché non creare una discussione? Poiché la classe chiama un codice MATLAB, il problema e la classe Java sono Here

Esiste qualche esempio di codice o tutorial che qualcuno di voi può consigliare? Grazie.

+2

Nota che la risposta che hai collegato * non * dice che hai bisogno di un processo separato. Puoi usare un thread, devi solo assicurarti di usare MATLAB solo da un thread. – sleske

+0

Beh, non funziona per me. Hai letto il link che ho postato su quel thread? Da quello che ho interpretato dall'articolo, ho davvero bisogno di un processo. A meno che tu non possa indicarmi la giusta direzione. –

risposta

15

C'è un solo modo per creare processi in Java, Runtime.exec() - in pratica consente di avviare una nuova JVM proprio come faresti tramite l'interfaccia della riga di comando.

+0

Quindi questo significa che devo compilare il codice come applicazione separata e chiamarlo? –

+6

Consente di avviare qualsiasi processo di sistema, non solo una nuova JVM, a meno che non si tratti del nuovo processo che si desidera avviare. – Dave

+0

@Dave: Sì, certo. –

23

Forse java.lang.Process potrebbe aiutare qui ..

I ProcessBuilder.start() e Runtime.exec metodi di creare un processo nativo e restituire un'istanza di una sottoclasse di processo che può essere utilizzato per controllare il processo e ottenere informazioni su di esso. Il processo di classe fornisce metodi per eseguire input dal processo, eseguire l'output nel processo, attendere il completamento del processo, controllare lo stato di uscita del processo e distruggere (uccidere) il processo.

+0

La sua domanda non riguarda java.lang.Process ma come scrivere un'applicazione in grado di clonare se stessa. –

+6

@Aaron: cosa ti fa credere che il poster voglia che l'app "cloni se stessa"? E cosa significa questo? Qualcosa come fork() in Unix? – sleske

+0

@sleske: Aaron ha quasi ragione, voglio eseguire una classe nel mio codice come un processo mentre il resto delle classi come un altro processo. In un certo senso la sua forcella(). –

4

Immagino che tu sappia come creare un nuovo processo. In caso contrario, vedere here o here.

Ora è necessario eseguire java.exe con il classpath corrente. È possibile trovare questo classpath nella proprietà System java.class.path. Per individuare java.exe, cercare in new File(System.getProperty("java.home"), "bin").

In caso di problemi con questo approccio, suggerisco di scrivere uno script wrapper e chiamarlo con argomenti sufficienti in modo che il codice in main() possa decidere quale classe effettiva richiamare.

+0

La proprietà di sistema java.class.path non contiene java.exe, probabilmente si intende java.home/bin. –

+0

@ AndreasÅgren: il testo era corretto ma confuso. Migliorato. –

+0

Ok, sembra buono. –

6

Se si desidera un maggiore controllo a grana fine, si potrebbe usare ProcessBuilder - questa classe consente di impostare le variabili di ambiente e di configurare i tubi del progetto (stdout, in, err).

Una volta configurato, è possibile chiamare ProcessBuilder#start() tutte le volte che si desidera per creare nuovi processi (restituisce un'istanza di Process). È possibile modificare la configurazione per i nuovi processi tra queste chiamate a start().

0

mia raccomandazione è di dare un'occhiata a zt-exec: https://github.com/zeroturnaround/zt-exec

E 'avvolto java.lang.ProcessBuilder ed e Apache Commons Exec, e riusciva processo del ciclo di vita facilmente.