java - 获取输出并将输入传递给在 java 下运行的执行进程时出现问题

标签 java multithreading process

我正在尝试调用一个简单的程序 test.exe,它就像 -

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

我想从 Java 程序中将其作为进程运行,并从中发送+接收 I/O。我正在使用具有 2 个线程的进程,如下所示-

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();
    }
}

但它们没有按预期工作。当我运行该程序时,它只显示“欢迎\n”消息,然后停止输入。当我给出一个整数并在 java 控制台中按 Enter 键时,它什么也不做。

我做错了什么?它们是两个独立的线程,为什么它们会互相阻塞?我的观念有问题吗?

最佳答案

程序等待您的输入。获取进程输出流(使用 getOutputStream)并写入。

关于java - 获取输出并将输入传递给在 java 下运行的执行进程时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6140549/

相关文章:

java - 如何从 LoggingEvent 获取 ISO 格式的时间?

java - 如何为基于gradle的Google App Engine项目在IntelliJ中启用带有断点的调试?

java - 如何解析 Java 中的命令行参数?

node.js - Node 如何使服务器进程保持事件状态?

javascript - 如何在 Node 中的 process.exit 之后启动另一个进程

c - 如何从 C 程序调用可执行文件(使用 winapi)?

java - 构建 APK 与 apache/http 库冲突

android - 在 Android 中长期运行的服务上读取、存储和发送读取的 GPS 位置

java - Apache Ignite 中单个分区上的 ScanQuery 是单线程还是多线程?

c++ - 使用 std::mutex 数组时,条件变量不会触发