Je n'arrive pas à démarrer une application à partir de mon interface graphique JavaFX. J'utilise ProcessBuilder
. Cela crée le processus, mais l'application ne sera pas lancée avant la fermeture de mon programme Java. Est-ce parce que ce programme spécifique attend des arguments ou quelque chose qui ne va pas avec mon code?Démarrage d'une application externe dans Java
@FXML
private void runWorldpac() {
try {
ProcessBuilder process = new ProcessBuilder("C:\\speedDIAL\\speedDIAL.exe");
Process p = process.start();
} catch (IOException e) {
e.printStackTrace();
}
}
L'application externe démarre mais ne permet aucune interaction avec l'application d'origine tant que je n'ai pas fermé ce programme externe. J'ai essayé d'exécuter un nouveau thread, même résultat. Voici le nouveau code:
try {
ProcessBuilder process = new ProcessBuilder("C:\\speedDIAL\\speedDIAL.exe");
Map<String, String> environ = process.environment();
Process p = process.start();
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
//System.out.println(line);
}
System.out.println("Program terminated!");
} catch (IOException e) {
e.printStackTrace();
}
Où gérez-vous les flux générés par le processus? C'est l'une des premières choses que je ferais ici, et pour m'assurer que mon processus fonctionne dans son propre thread. –
Cette application externe n'est pas censée renvoyer des données à mon application, ai-je encore besoin de gérer les flux? Donc je dois spécifier qu'il fonctionne sur un autre thread? Je pensais que c'était déjà fait parce que quand je ferme mon application, l'application externe reste en cours d'exécution (commence réellement à courir). Désolé je suis relativement nouveau à ceci. Merci. –
Oui, vous devez absolument gérer les flux, sinon l'application risque de manquer de mémoire tampon, ce qui risque de provoquer un blocage. S'il vous plaît lire [Lorsque Runtime.exec() ne sera pas] (http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html). L'article contient des informations datées (n'utilisant pas ProcessBuilder pour un), mais la plupart des informations qu'il contient sont exactes. –