Запуск Runtime.exec () не создает файл в переполнении стека

У меня есть исполняемый файл C ++, который открывает файл и записывает в него строку. Работает нормально само по себе.

#include <iostream>
#include <fstream>

using namespace std;

int main(){
ofstream fout;
fout.open("test.txt");
if(fout.is_open()){
cout<<"test"<<endl;
fout<<"Hello World!" << endl;
}
fout.close();
return 0;
}

И я сделал main () в Java, чтобы вызвать его оттуда так:

public static void main(String args[]){
File f = new Resources().getFile("test.exe");
System.out.println(f.exists());
String path = f.getAbsolutePath();try{
Process p = new ProcessBuilder(path).start();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));

String line = "";
while(line != null){
line = br.readLine();
System.out.println(line);
}

p.destroy();

}catch(Exception e){
System.out.println(e.getMessage());
}

}

Первая строка в main из моего проекта, он находит файл, он тоже работает.

Дело в том, что когда исполняемый файл запускается один, он создает файл и записывает в него. Когда я запускаю java main (), файл не создается, хотя я получаю вывод из stdout. Таким образом, исполняемый файл запускается, но не создает файл.

Я схожу с ума, люди … что делать?

-1

Решение

использование Process.waitFor() метод вместо Process.destroy() метод.

2

Другие решения

Это было бы самым простым, что вы можете использовать, но имейте в виду, что это будет работать в вашем конкретном простом случае. Если ваш exe печатает сначала в stderr, он заблокируется. В другом случае вам нужно 2 потока, которые будут читать stdout и stderr вашего процесса, чтобы не блокировать.

    try
{
Process proc = Runtime.getRuntime().exec( "your exec here" );

// handle process' stdout stream
InputStream out = proc.getInputStream();
//Thread err = proc.getErrorStream();
BufferedReader br = new BufferedReader( new InputStreamReader( out ) );int exitVal = proc.waitFor();
String line;

while ( ( line = br.readLine() ) != null )
{
System.out.println( line );
}
}
catch( Exception e )
{
System.out.println( "oops: " + e.getMessage() );
}
0

По вопросам рекламы [email protected]