一个 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();
}
1
sandman511 OP 而且有一点 调用记事本的时候 会直接弹出记事本,但是调用这个 exe 并没有弹出界面,但是任务管理器中,在 idea 的子进程中有 exe 这个进程
|
2
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); } |
3
vwym 2019-11-05 10:24:23 +08:00
exe 本质上是一个壳,你调用记事本打开那是因为记事本做了图形化界面。调用对应 exe 没有界面那是别人没做。
“打开后需要自定义输入 输出文件的文件名 后按回车才能开始运算(或者直接回车,用默认的文件名) 不知道调用 exe 后如何输入一些内容” 推测别人做了信息提示,但是你用 readline()读取会导致主线程阻塞,获取提示信息后,没办法通过流把信息传递给 Stas.exe ,这里需要用到第二条线程,第一条线程专门处理 process 的 inputstream,第二条线程专门打印 process 的 outputstream。 |
4
z888888cn 2019-11-05 10:47:45 +08:00
输入输出流重定向。
或者 test.exe << 输入的内容 |