• 请不要在回答技术问题时复制粘贴 AI 生成的内容
sandman511
V2EX  ›  程序员

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

  •  
  •   sandman511 · Nov 5, 2019 · 2299 views
  •   You need to sign in to view this topic
    This topic created in 2474 days ago, the information mentioned may be changed or developed.

    一个 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();
            }
        
    
    4 replies    2019-11-05 10:47:45 +08:00
    sandman511
        1
    sandman511  
    OP
       Nov 5, 2019
    而且有一点 调用记事本的时候 会直接弹出记事本,但是调用这个 exe 并没有弹出界面,但是任务管理器中,在 idea 的子进程中有 exe 这个进程
    xyjincan
        2
    xyjincan  
       Nov 5, 2019
    你要调用的进程还没跑出来,主程序就退出了,你需要开个线程等一会,得到需要的结果后再说


    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
        3
    vwym  
       Nov 5, 2019
    exe 本质上是一个壳,你调用记事本打开那是因为记事本做了图形化界面。调用对应 exe 没有界面那是别人没做。
    “打开后需要自定义输入 输出文件的文件名 后按回车才能开始运算(或者直接回车,用默认的文件名) 不知道调用 exe 后如何输入一些内容”
    推测别人做了信息提示,但是你用 readline()读取会导致主线程阻塞,获取提示信息后,没办法通过流把信息传递给 Stas.exe ,这里需要用到第二条线程,第一条线程专门处理 process 的 inputstream,第二条线程专门打印 process 的 outputstream。
    z888888cn
        4
    z888888cn  
       Nov 5, 2019
    输入输出流重定向。
    或者 test.exe << 输入的内容
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3492 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 04:31 · PVG 12:31 · LAX 21:31 · JFK 00:31
    ♥ Do have faith in what you're doing.