Bonjour,
j'ai créé un programme java permettant de lancer une commande extérieure pour éditer un document de type Office ou OpenOffice.
J'utilise la méthode proc.waitFor() pour attendre la fin d'exécution de mon processus externe. Cela fonctionne plutôt bien sauf si une instance de ce programme est déjà lancée.
Prenons l'exemple de l'édition d'un document OpenOffice, si j'ai déjà le programme OpenOffice lancé sur ma machine (soffice.exe dans la liste des processus), l'instruction proc.waitFor() va considérer "bizarrement" que le programme a immédiatement terminé son exécution...
voici mon code :
Il y a t'il une méthode plus adéquate ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 package launchexternalprocess; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.security.AccessController; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; public class LaunchExternalProcess { /** * @param args the command line arguments */ public static void main(String[] args) throws Exception{ // TODO code application logic here LaunchExternalProcess launchExternalProcess = new LaunchExternalProcess(); final String exec = "C:\\programmes\\openoffice\\program\\soffice.exe C:\\Users\\myUser\\tmp\\thefile.odt"; //Process p = Runtime.getRuntime().exec("cmd /c dir"); Process proc = launchExternalProcess.launchApp(exec); int ev = 0; if (proc.waitFor() != 0) { ev = proc.exitValue(); } System.out.println(ev); } public Process launchApp(final String launchPath) throws PrivilegedActionException { Process proc = (Process) AccessController.doPrivileged( new PrivilegedExceptionAction() { public Object run() throws IOException { return Runtime.getRuntime().exec(launchPath); } } ); return proc; } }
Merci par avance pour vos conseils.
Partager