从Java运行C ++ .exe程序没有输出,也没有接收输入

时间:2018-01-21 00:18:51

标签: java c++ processbuilder

这必须是非常具体的,因为我已经尝试了几个地方已经描述的所有已知方法。

我有MinGW编译的C ++程序,它以:

开头
int main(int argc, char* argv[])
{
    if(argc!=2)
    {
        cout << "Sposób użycia: <1> <2>" << endl;
        return -1;
    }
    ...
}

在命令行中它工作正常 - 获取输入,提供输出,允许管道重定向。

在Java中,我尝试过使用Runtime #exec(),然后切换到ProcessBuilder,但都没有工作。当我运行(或类似的东西)时,进程#getInputStream()总是不给我任何东西:

    ProcessBuilder pb = new ProcessBuilder("compiledCPP.exe");
    Process p = pb.start();
    InputStream is = p.getInputStream();
    int value = -1;
    while ((value = is.read()) != -1)
    {
        System.out.print((char) value);
    }
    p.waitFor();

至少应该在第一段代码中给我用C ++文件写的消息。

我该怎么做?

编辑:无法解决?

在尝试了所有可能的组合并阅读不同编译单元(C ++与Windows或64位/ 32位)之间发生的类似输入/输出/错误流相关的事情后,我很确定这个问题与某种类型的mingw生成的.exe文件与在Windows上运行的java不兼容。除此之外 - 相同的设置显然适用于完全POSIX设置。

如果有人发现如何修复它 - 我会很高兴听到它(请注意问题是关于win / mingw / java8 / c ++)。

1 个答案:

答案 0 :(得分:0)

可能是您必须先启用输出重定向吗? See here