【问题标题】:Java runtime.exec causes program crashJava runtime.exec 导致程序崩溃
【发布时间】:2011-05-29 15:34:51
【问题描述】:

我正在尝试使用 java 运行外部程序 Decoder.exe: Runtime.getRuntime().exec("C:\fullpath-and-so-on\Decoder.exe -h");像这样:

    try{
        Process p = Runtime.getRuntime().exec("C:\\fullpath-and-so-on\\Decoder.exe -h");
    }
    catch(Exception e){
        e.printStackTrace();
    }

这适用于我尝试过的所有其他程序。但是每当我从 java 执行它时,Decoder.exe 就会崩溃。 java 执行得很好并且不会产生任何异常,但是被调用的程序 Decodes.exe 停止工作。程序 Decoder.exe 在单独的 cmd 窗口中运行时完美执行。

有没有人遇到过类似的问题? java运行exec和cmd.exe运行程序有什么不同?是否有已知的解决方法或者我只是在某个地方犯了错误?

非常感谢您的帮助! BR, 弗雷德里克

【问题讨论】:

  • 您对发生什么错误有任何线索吗?执行环境可能与程序运行所在的文件夹略有不同。
  • 没有任何线索。由于它是停止工作的被调用程序,我没有得到堆栈跟踪。由于使用了 Decoder.exe 的完整路径,我认为当前路径无关紧要(?)

标签: java exec decode wireshark


【解决方案1】:

你说停止工作?

decoder.exe 是否将输出写入 stderr 或 stdout?在这种情况下,您必须读取这些流,因为流的缓冲区非常小,如果这些缓冲区已满,执行将停止。

这是一篇很棒的文章,它很旧,但它仍然有效: When Runtime.exec() won't

【讨论】:

  • 非常感谢您的建议。但是,我认为问题不是缓冲区。实施了建议的解决方案之一,并确保清空缓冲区。然而,外部程序以同样的方式崩溃。
  • 进程是否依赖环境变量?在这种情况下,您也需要提供这些。文章中还解释了您是如何做到这一点的。顺便提一句。您是否创建了两个同时读取 treams 的线程?
  • 不,它没有,但在阅读了 mKorbels 的建议并阅读了您建议的文章后,我发现这是我如何将参数传递给程序的问题。非常感谢您的帮助!
【解决方案2】:

【讨论】:

  • 谢谢!原来是我向程序传递参数的方式出错了。
猜你喜欢
  • 1970-01-01
  • 2015-06-28
  • 2012-01-07
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多