Bonjour :)
je lance un runtime :
et je voudrais connaitre quand ça fini pour en lancer un autre.Code:Runtime.getRuntime().exec("cmd /K k:\\Metier\\EIE\\RNNN\\verif7");
Auriez vous une piste ? ;)
Version imprimable
Bonjour :)
je lance un runtime :
et je voudrais connaitre quand ça fini pour en lancer un autre.Code:Runtime.getRuntime().exec("cmd /K k:\\Metier\\EIE\\RNNN\\verif7");
Auriez vous une piste ? ;)
méthode waitFor sur l'objet Process, par exemple.
Merci Tchize_ :)
je rame un peu : est ce que c'est parce que les commandes que je lance sont des .bat (qui lancent ensuite des jar avec : java -clathpath... nomdujar )
voici mon code:
si vous avez une piste ? ;)Code:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.lang.Runtime; import javax.swing.*; public class VerifAllerDirect { public String requette, requette2; public ResultSet resultset, resultset2; public Boolean resultat, resultat2; public Statement statement, statement2; public Connection con; public VerifAllerDirect() { //crée la connection ==> MySQL try { con = DriverManager.getConnection("jdbc:mysql://1.1.1.20:3306/basetempo","root","pw"); //test sur la verif try { Runtime runtime = Runtime.getRuntime(); String[] args = { "cmd.exe", "/C", "k:\\Metier\\EIE\\nnnn\\verif7" }; final Process process = runtime.exec(args); int wait = process.waitFor(); requette = "select * from `basetempo`.`table1_erreur_aller`"; requette2 = "select * from `basetempo`.`table2_erreur_aller`"; try { statement =con.createStatement(); if (statement.execute(requette)){ resultset=statement.getResultSet(); resultset.last(); if (resultset.getRow() != 0) JOptionPane.showMessageDialog(null, "La verif à échoué. il y a " + resultset.getRow() + " erreurs dans table: table1_erreur_aller "); else { statement2 =con.createStatement(); if (statement2.execute(requette2)){ resultset2=statement2.getResultSet(); resultset2.last(); if (resultset2.getRow() != 0) JOptionPane.showMessageDialog(null, "La verif à échoué. il y a " + resultset2.getRow() + " erreurs dans table: table2_erreur_aller"); else { //test sur l'aller String[] args2 = { "cmd.exe", "/C", "k:\\Metier\\EIE\\nnnn\\aller7" }; // runtime.exec(args2); } } } } } catch (Exception e) { JOptionPane.showMessageDialog(null, "L'aller à échoué."); e.printStackTrace(); } } catch (Exception e) { JOptionPane.showMessageDialog(null, "La vérif a échoué."); e.printStackTrace(); } } catch (SQLException e) { JOptionPane.showMessageDialog(null, "la connection a l'extranet à échoué"); e.printStackTrace(); } // dans tous les cas fermer la connection ==> MySQL finally { try { con.close(); } catch(SQLException e2){ e2.printStackTrace(); } } } }
dans la vue de debogage,
lors d'un pas-sans-entrée sur: int wait = process.waitFor();
la vue des variables se vide puis ça plane je sais pas ou ? :)
la commande waitFor attends que le processus se soit terminé. tant qu'il n'est pas terminé, elle ne retourne pas.
Après un bon repas :)
Je lis le buffer dans un thread indépendant ,
java me liste bien le contenu de mon .bat ,
mais me met un "URL cannot be nul" après l"éxécution du jar: JOJO qui ne peux fonctionner que quand il est lancé à partir du dossier sur lequel je me suis positionné.
mon codema consoleCode:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96 ... //test sur la verif try { Runtime runtime = Runtime.getRuntime(); String arg = "cmd.exe /C k:\\Metier\\EIE\\nnnn\\verif7.bat"; final Process process = runtime.exec(arg); //Consommation de la sortie standard de l'application externe dans un Thread separe new Thread() { public void run() { try { BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line = ""; try { while((line = reader.readLine()) != null) { System.out.println("buffer lu =" + reader.readLine().toString()); // Traitement du flux de sortie de l'application si besoin est } } finally { reader.close(); } } catch(IOException ioe) { ioe.printStackTrace(); } } }.start(); //Consommation de la sortie d'erreur de l'application externe dans un Thread separe new Thread() { public void run() { try { BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream())); String line = ""; try { while((line = reader.readLine()) != null) { // Traitement du flux d'erreur de l'application si besoin est } } finally { reader.close(); } } catch(IOException ioe) { ioe.printStackTrace(); } } }.start(); int wait = process.waitFor(); System.out.println("le wait=" + wait); requette = "select * from `baseTempo`.`table1_erreur_aller`"; requette2 = "select * from `baseTempo`.`table2_erreur_aller`"; try { //recherche d'erreur dans la table de verif table1_erreur_aller statement =con.createStatement(); if (statement.execute(requette)){ resultset=statement.getResultSet(); resultset.last(); if (resultset.getRow() != 0) JOptionPane.showMessageDialog(null, "La verif à échoué. il y a " + resultset.getRow() + " erreurs dans table: table1_erreur_aller "); else { //recherche d'erreur dans la table de verif table2_erreur_aller statement2 =con.createStatement(); if (statement2.execute(requette2)){ resultset2=statement2.getResultSet(); resultset2.last(); if (resultset2.getRow() != 0) JOptionPane.showMessageDialog(null, "La verif à échoué. il y a " + resultset2.getRow() + " erreurs dans table: table2_erreur_aller"); else { //test sur l'aller String arg2 = "cmd.exe /C k:\\Metier\\EIE\\nnnn\\aller7.bat"; runtime.exec(arg2); } } } } } catch (Exception e) { JOptionPane.showMessageDialog(null, "L'aller à échoué."); e.printStackTrace(); } } catch (Exception e) { JOptionPane.showMessageDialog(null, "La vérif a échoué."); e.printStackTrace(); } } catch (SQLException e) { JOptionPane.showMessageDialog(null, "la connection a l'extranet à échoué"); e.printStackTrace(); } // dans tous les cas fermer la connection ==> MySQL finally { try { con.close(); }
Ma question étant est ce que : "URL cannot be nul" c'est important ?Citation:
buffer lu =X:\workspace\transferer>CD K:\Metier\EIE\nnnn\cccccc\Verif
buffer lu =X:\workspace\transferer>java -classpath "K:\Metier\EIE\nnnn\cccccc\Verif\ModuleVerif.jar;K:\Metier\EIE\nnnn\cccccc\mysql-connector-java-5.1.13-bin.jar;" com.mapforce.JOJO /Run 7
buffer lu =ERROR: The url cannot be null
buffer lu =Stack Trace:
buffer lu =X:\workspace2\transferer>CD \
buffer lu =X:\>exit
le wait=0
et pourquoi "java -classpath..." me donne un wait à 0 ?
merci pour vos pistes ;)
A voir avec l'application que tu lance, il viens d'elle ce message
La valeur de retour de waitFor est la valeur de retour du programme lancé. Comme le programme est cmd.exe et qu'il a fini d'exécuté le .bat, logiquement, il retourne 0 pour dire tout c'est bien passé.Citation:
et pourquoi "java -classpath..." me donne un wait à 0 ?
merci pour vos pistes ;)