Я хочу запустить консольную программу .exe с Java и использовать Java для управления потоками ввода и вывода из окна консоли.Я знаю, что могу получать входной и выходной потоки из приложения, и вот как я это делаю в настоящее время:
try {
process = Runtime.getRuntime().exec("C:\\Users\\Owner\\Documents\\testApp\\console.exe");
} catch (IOException e1) {
e1.printStackTrace();
return;
}
stdin = process.getOutputStream();
stdout = process.getInputStream();
Затем я могу использовать BufferedReader, чтобы показать выходные данные, которые обычно отображает .exeОднако я не могу понять, как передать ввод из консольной программы приложения Java в реальный поток ввода .exe.Мне нужна помощь, как это сделать.
Редактировать: Хорошо, теперь у меня есть это, которое работает одновременно;однако, я не могу получить какой-либо вывод, связанный с любым вводом, который я беру из окна консоли Java.
new Thread(new Runnable() {
public void run() {
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
try {
while ((line = br.readLine()) != null) {
System.out.println("[OUT] " + line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable() {
public void run() {
try {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = System.in.read(buffer)) != -1) {
for(int i = 0; i < buffer.length; i++) {
int intValue = new Byte(buffer[i]).intValue();
if (intValue == 0) {
bytesRead = i;
break;
}
}
// for some reason there are 2 extra bytes on the end
stdin.write(buffer, 0, bytesRead-2);
System.out.println("[IN] " + new String(buffer, 0, bytesRead-2) + " [/IN]");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();