2012-06-28 99 views
1

我想从我的Java Web应用程序运行C++可执行文件。当我进入相关页面时,它会执行命令并运行可执行文件,但不会产生任何输出。从Java运行C++可执行文件时没有错误或输出

这里是我的代码:

URL createWav = QRcodeController.class.getClassLoader().getResource("createWav"); 
log.info("The path of the c++ executable obtained: "+ createWav.getPath()); 
Process p1 = Runtime.getRuntime().exec("chmod 777 " + createWav.getPath()); 
p1.waitFor(); 
int exitVal=1; 
try { 
     Process p2 = Runtime.getRuntime().exec(createWav.getPath(), args); 
     exitVal = p2.waitFor(); 
} 
catch (Exception e) 
{ 
    log.error(e.getStackTrace()); 
} 
if(exitVal == 1) 
    throw new Exception("Error in c++ program"); 

所以C++程序运行正常,但它不会产生它应该是文件它不会引发任何错误。当我在同一台机器上从命令行运行相同的命令时,它完美地生成了所需的文件。我不确定我做错了什么。

+1

你可以用硬编码路径重试吗?这可能是由Java程序创建的文件,但位于不同的位置。 – Stefan

+0

它无法运行该程序,因此我无法找到该文件。谢谢。 – ishan

回答

1

C++程序正在将其输出写入管道,而不是Java程序的标准输出。使用Process.getOutputStream()访问流,或者使用Java 1.7,采用ProcessBuilder在那里你可以使用redirectOutput这样的:

pb.redirectOutput(ProcessBuilder.Redirect.INHERIT) 

如果你的C++程序威力写东西到其标准错误流,你应该处理以同样的方式。

另外请注意,无论是留下这些流连接到管道和从管道读取可能会导致应用程序的输出块如果与管道相关的缓冲区已满。要简单地忽略输出,你必须明确地将其重定向到/dev/null。这不是你目前的目标,但它可能处于不同的情况。

2

process获取输出流和错误流,看看会发生什么。

现在你正在盲目工作。

+0

谢谢我能够看到输出现在和当前调试它。谢谢您的帮助。 – ishan

相关问题