-
problème avec getRuntime
Salut à tous
j'ai besoin dans mon application de stopper ensuite redémarrer mon serveur pour cela j'utilise les deux instructions suivante dans le meme bouton:
Runtime.getRuntime.exec(commande pour stopper le serveur )
Runtime.getRuntime.exec(commande pour redémarrer le serveur )
le problème est lorsque je clique sur le bouton , soit le serveur démarre (s'il est arreté) soit il s'arrete (s'il est déja démarré) mais pas les deux instructions au même temps.
Où est le problème?
Merci d'avance pour votre aide :help:
-
Tu ne lances pas les commandes en background ( & ) ?
Utilises-tu le waitFor de la classe Process ? si oui comment ?
-
mes commandes sont des commandes shell. et j'ai pas utilisé waitfor();
-
Je pense que c'est bien ça le problème puis les process sont lancés en parallèle.
-
Salut,
oui même moi je pense que c'est ça, mais je ne sais pas quoi faire pour règler le problème:cry:
-
Bah tu dois invoquer un "waitFor" après le lancement de chaque process pour être sûr que ton programme java se fige ( et donc ne lance pas d'autre processus genre Arret+démarrage en même temps ) jusqu'à ce que ce processus soit totalement terminé.
-
Exactement. Si ton service est arrété, ton instruction de stop va surement sortir en erreur ou ne rien faire étant donné qu'il est deja arrété.
Et donc seul le start va être effectué.
Dans le cas ou il est démarré, il va l'arrété. Par contre le start va essayer de s'executer en même temps que le stop. Donc surement qu'il va en erreur ou ne peut s'executer.
Solution envisageable qui n'est pas la plus propre mais efficace, savoir le temps qu'il lui faut pour l'arreter s'il n'est pas deja à l'arret. Faire ton stop, mettre un sleap et le redemarrer
Runtime r =Runtime.getInstance();
r.getRuntime(commande de stop);
Thread.sleep(temps en miliseconde qu'il faut pour l'arréter);
r.getRuntime(commande de start);
Sinon autre solution qui peut peut etre fonctionner et qui etre plus propre
Runtime r =Runtime.getInstance();
Process c;
c = r.getRuntime(commande de stop);
c.waitFor();
r.getRuntime(commande de start);
Au moins une des 2 solutions devrait satisfaire à ton bonheur.
-
Erreur, désolé je me suis un peu emporté.
Runtime r = Runtime.getRuntime();
r.exec(commande stop);
Thread.sleep(temp de l'arret en ms);
r.exec(commande de start);
OU
Runtime r = Runtime.getRuntime();
Process p = r.exec(commande stop);
p.waitFor();
r.exec(commande de start);
Voilà c'est déjà plus juste!
-
La première est vraiment crado ! que se passe si pour une raison quelquonque l'arret dure plus longtemps que prévu ?? ;)
--> Utilise la deuxième
-
Salut
:merci:
Merci beaucoup maxf1 et iohack