求助: Java 调用 exe 后如何输入一些内容

2019-11-05 09:34:28 +08:00
 sandman511

一个 exe 文件用于计算,打开后跟 cmd 类似,无法接受参数 打开后需要自定义输入 输出文件的文件名 后按回车才能开始运算(或者直接回车,用默认的文件名) 不知道调用 exe 后如何输入一些内容,以下是代码(无效)

        String[] cmd2 = {"D:\\xxx\\Stas.exe"};
        Process process = null;
        try {
            Runtime runtime = Runtime.getRuntime();
            process = runtime.exec(cmd2);
            InputStreamReader in=new InputStreamReader(process.getInputStream());
            BufferedReader inBr=new BufferedReader(in);
            String lineStr;

            OutputStreamWriter os = new OutputStreamWriter(process.getOutputStream());
            BufferedWriter bw = new BufferedWriter(os);
            bw.write("\n"); 
            bw.write("\n");

            while((lineStr=inBr.readLine())!=null){
                System.out.println(lineStr);
            }

            //process.waitFor();
            process.getInputStream().close();
            process.getOutputStream().close();
            inBr.close();
            in.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    
1530 次点击
所在节点    程序员
4 条回复
sandman511
2019-11-05 09:37:37 +08:00
而且有一点 调用记事本的时候 会直接弹出记事本,但是调用这个 exe 并没有弹出界面,但是任务管理器中,在 idea 的子进程中有 exe 这个进程
xyjincan
2019-11-05 10:05:55 +08:00
你要调用的进程还没跑出来,主程序就退出了,你需要开个线程等一会,得到需要的结果后再说


boolean flag = true;
while(flag) {
if(!process.isAlive()) {
flag = false;
try {
process.getInputStream().close();
process.getOutputStream().close();
inBr.close();
in.close();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Thread.sleep(100);
}
vwym
2019-11-05 10:24:23 +08:00
exe 本质上是一个壳,你调用记事本打开那是因为记事本做了图形化界面。调用对应 exe 没有界面那是别人没做。
“打开后需要自定义输入 输出文件的文件名 后按回车才能开始运算(或者直接回车,用默认的文件名) 不知道调用 exe 后如何输入一些内容”
推测别人做了信息提示,但是你用 readline()读取会导致主线程阻塞,获取提示信息后,没办法通过流把信息传递给 Stas.exe ,这里需要用到第二条线程,第一条线程专门处理 process 的 inputstream,第二条线程专门打印 process 的 outputstream。
z888888cn
2019-11-05 10:47:45 +08:00
输入输出流重定向。
或者 test.exe << 输入的内容

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/616317

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX