2010-03-12 136 views
4

你会认为,发动从Java一个bat文件将是一件容易的事,但没有...我有一个bat文件,做了值的环从一个文本文件中读取一些SQL命令。它或多或少是这样的:运行bat文件,并等待

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

不要担心他们不重要的细节。我要的是简单地从内部的Java运行这个批处理文件,并把它等到执行完毕。显然这并不容易。我到目前为止是这样的:

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

问题是exec()方法立即返回。该bat文件运行了2-3分钟。我尝试删除开始,但无济于事。我尝试了很多变化,但它让我无处可寻。关于如何做这个简单任务的任何想法?

回答

11

你不应该忽视的.exec()返回值。它给你一个Process对象,您可以waitFor(),像这样:

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

你需要在过程exec调用返回使用waitFor

+0

感谢它wworked但mmyers 2秒打你举了一个例子:P +1虽然 – 2010-03-12 16:35:12

+1

@Savvas:其实他的24秒打我,但也许这是因为该示例的... :) :) – 2010-03-12 16:45:55

+0

我希望我可以给你2+则:P – 2010-03-12 19:51:38