一个 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 << 输入的内容 |