1

我正在.exe从我的程序运行一个文件,它需要一定的时间。此命令的输出用于以下语句中以进行进一步处理。输出是一个布尔变量。但是程序是false立即返回的,但实际上该命令仍在执行中,并且需要一定的时间。由于 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();
        }
4

2 回答 2

0

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

于 2013-10-21T07:37:16.193 回答
0

假设您最终在方法Runtime.exec()内部使用exec(),您可以使用返回的对象的waitFor()方法等待执行完成:ProcessRuntime.exec()

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

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

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

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

或者,您可能想检查ProcessBuilder课程。

于 2013-10-21T07:30:47.830 回答