2010-03-12 9 views
4

On pourrait penser que lancer un fichier bat de Java serait une tâche facile mais non ... J'ai un fichier bat qui fait quelques commandes sql pour une boucle de valeurs lue depuis un fichier texte . Il est plus ou moins comme ceci:Exécuter le fichier bat en Java et attendre

FOR /F %%x in (%CD%\listOfThings.txt) do sqlcmd -Slocalhost\MSSQL %1 %2 -d %3 -i %CD%\SQLScripts\\%%x 
exit 

Ne vous inquiétez pas pour les détails, ils ne sont pas importants. Ce que je veux, c'est simplement exécuter ce fichier bat à partir de Java et le faire attendre jusqu'à ce que l'exécution est terminée. Apparemment, ce n'est pas facile. Ce que j'ai jusqu'ici est ceci:

Runtime.getRuntime().exec("cmd /K start SQLScriptsToRun.bat" 
        +" -U"+getUser() 
        +" -P"+getPass() 
        +" " + projectName); 
return true; 

Le problème est que la méthode exec() renvoie immédiatement. Le fichier bat dure 2-3 bonnes minutes. J'ai essayé d'enlever le début mais en vain. J'ai essayé beaucoup de variations mais ça ne m'a rien donné. Des idées sur la façon de faire cette tâche simple?

Répondre

11

Vous ne devez pas ignorer la valeur de retour de .exec(). Il vous donne un objet Process que vous pouvez waitFor(), comme ceci:

final Process process = Runtime.getRuntime().exec("blahblahblah"); 
final int exitVal = process.waitFor(); 
// if exitVal == 0, the command succeeded 
6

vous devez utiliser waitFor sur le processus exec rappels.

+0

grâce wworked mais il mmyers vous a battu de 2 secondes et a donné un exemple: P +1 si –

+1

@Savvas: En fait, il m'a battu de 24 secondes , mais peut-être que c'était à cause de l'exemple ... :) –

+0

:) Je voudrais pouvoir vous donner 2+ alors: P –

Questions connexes