2010-09-14 15 views
2

J'écris une application Java dans laquelle j'ai besoin d'exécuter un processus en arrière-plan pendant toute la durée de vie de l'application en cours d'exécution.Exécution du processus d'exécution Java en arrière-plan

Voici ce que j'ai:

Runtime.getRuntime().exec("..(this works ok).."); 
Process p = Runtime.getRuntime().exec("..(this works ok).."); 
InputStream is = p.getInputStream(); 
InputStreamReader isr = new InputStreamReader(is); 
BufferedReader br = new BufferedReader(isr); 

Donc, au fond, j'imprimer tous les br.readLine(). La chose dont je ne suis pas sûr est comment implémenter ce code dans mon application parce que partout où je le mets (avec Runnable), il bloque l'exécution de tout autre code (comme prévu).

Je l'ai utilisé Runnable, Fil, SwingUtilities, et rien ne fonctionne ...

Toute aide serait grandement apprécié :)

Répondre

1

Vous pouvez lire le flux d'entrée (i.e. br.readLine()) dans un fil. De cette façon, il fonctionne toujours en arrière-plan.

La façon dont nous avons mis en place cela dans notre application est à peu près comme ci-dessous:

logique métier, à savoir l'endroit où vous invoquez le script:

// Did something... 

InvokeScript.execute("sh blah.sh"); // Invoke the background process here. The arguments are taken in processed and executed. 

// Continue doing what you were doing 

InvokeScript.execute() ressemble à quelque chose comme ci-dessous:

InvokeScript.execute(String args) { 
// Process args, convert them to command array or whatever is comfortable 

Process p = Runtime.getRuntime().exec(cmdArray); 

ReaderThread rt = new ReaderThread(p.getInputStream()); 
rt.start(); 
} 

ReaderThread devrait continuer à lire la sortie du processus que vous avez démarré, tant qu'il dure.

Veuillez noter que ce qui précède n'est qu'un pseudo-code.

+0

Merci pavanlimo, un conseil sur quand et où démarrer le processus = Runtime.getRuntime(). Exec (? – phillyville

+0

S'il vous plaît voir mon edit ci-dessus – pavanlimo

+0

Merci un groupe pavanlimo, j'ai testé le code sur le navigateur et fonctionne comme un charme, mais je suis en train de chercher quelque chose pour l'application de bureau Java. Connaissez-vous l'équivalent de InvokeScript et ReaderThread en Java? – phillyville