Это должно быть что-то очень конкретное, потому что я попробовал все известные способы, уже описанные в нескольких местах.
У меня есть 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 ++ в 1-м куске кода.
Как мне это сделать?
РЕДАКТИРОВАТЬ: неразрешимой?
После того, как я попробовал каждую возможную комбинацию и прочитал о похожих вещах, связанных с in / out / err-stream, которые происходят между разными модулями компиляции (C ++ против Windows или 64bit / 32bit), я почти уверен, что эта проблема связана с некоторой несовместимостью mingw -произведенный .exe файл против Java, работающего на Windows. Кроме этого — та же самая установка, очевидно, работает на полностью настройке POSIX.
Если кто-нибудь когда-нибудь найдет, как это исправить — я буду рад это услышать (учтите, что проблема в win / mingw / java8 / c ++).
Может быть, вам нужно сначала включить перенаправление вывода?
Посмотреть здесь.
Других решений пока нет …