处理java中程序的延迟执行

时间:2013-10-21 07:23:05

标签: java

我正在运行程序中的.exe文件,并且需要一定的时间。此命令的输出在以下语句中用于进一步处理。输出是一个布尔变量。但程序立即返回false,但事实上命令仍在执行中并且需要一定的时间。由于错误值,后续语句会引发错误。我该如何处理这种情况。 return_var = exec(pagecmd)是执行语句。

boolean return_var = false;
if("true".equals(getConfig("splitmode", ""))){
    System.out.println("Inside splitmode if**********************");
    String pagecmd = command.replace("%", page);
    pagecmd = pagecmd + " -p " + page;
    File f = new File(swfFilePath); 
    System.out.println("The swffile inside splitmode block exists is -----"+f.exists());
    System.out.println("The pagecmd is -----"+pagecmd);
    if(!f.exists()){
        return_var = exec(pagecmd);
        System.out.println("The return_var inside splitmode is----"+return_var);
        if(return_var) {                    
            strResult=doc;                       
        }else{                      
            strResult = "Error converting document, make sure the conversion tool is installed and that correct user permissions are applied to the SWF Path directory" + 
                        getDocUrl();
        }

2 个答案:

答案 0 :(得分:0)

假设您最终在exec()方法中使用Runtime.exec(),则可以使用从Runtime.exec()返回的waitFor()对象的Process方法等到执行完毕:

...
Process p = Runtime.getRuntime().exec(pagecmd);
int result = p.waitFor();
...

waitFor()的返回值是子流程的退出代码。

如果您确实需要从子流程写入其stderrstdout频道的子流程读取输出,则需要使用{{1} (注意: Process.getInputStream())和getOutputStream()并读取这些流的子流程输出。然后,检查流的Process.getErrorStream()方法的返回值,以检查子进程是否已终止(或至少关闭其输出流),而不是使用read()

此外,对于这类问题,您应该考虑使用Apache commons exec库。

或者,您可能需要查看ProcessBuilder类。

答案 1 :(得分:0)

与Andreas建议的waitFor()一起使用时,您可能还需要使用exec()返回的Process对象的getInputStream来检索正在执行的程序所写的数据。