Проблема с выводом и передачей ввода в исполняемый процесс, работающий под Java - PullRequest
2 голосов
/ 26 мая 2011

Я пытаюсь вызвать простую программу test.exe, которая проста как

.
int main()
{
    int a;
    cout<<"Welcome\n";
    while(cin>>a&&a!=0)
    cout<<"you entered "<<a<<endl;
}

Я хочу запустить его из Java-программы как процесс и отправить + получить ввод-вывод из него. Я использую процесс с двумя потоками следующим образом -

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Processproblem {

    public static void main(String[] args)throws IOException, InterruptedException {
        final Process process;
          try {
            process = Runtime.getRuntime().exec("test.exe");
        } catch (IOException e1) {
            e1.printStackTrace();
            return;
        }

           new Thread(new Runnable() {
            public void run() {
                String line;
                BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
                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 reading=0;
                System.out.println(reading);
                BufferedWriter bw= new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));

                while(reading!=-1)
                {
                     reading= System.in.read(buffer);
                     for(int i = 0; i < buffer.length; i++) {
                        int intValue = new Byte(buffer[i]).intValue();
                        if (intValue == 0) {
                            reading = i;
                            break;
                        }
                        else
                        {
                            bw.append((char)intValue);
                        }
                    }
                      bw.newLine();
                        bw.flush();

                }

            } catch (Exception e) {
            }
        }
    }
            ).start();
    }
}

Но они работают не так, как ожидалось. Когда я запускаю программу, она просто показывает сообщение "Welcome \ n" и затем останавливается для ввода. Когда я даю целое число и нажимаю ввод в консоли Java, он ничего не делает.

Что я делаю не так? Это два отдельных потока, так почему они блокируют друг друга? Есть ли проблема в моей концепции?

1 Ответ

3 голосов
/ 26 мая 2011

Программа ожидает вашего ввода.Возьмите поток вывода процесса (используя getOutputStream) и запишите в него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...