输入参数并在运行时通过java swing应用程序继续执行cmd命令。execute()

输入参数并在运行时通过java swing应用程序继续执行cmd命令。execute(),java,swing,cmd,Java,Swing,Cmd,我有一个用于构建过程的ant命令,当我在命令提示符下执行该命令时,在执行之间,它会提示我输入一些密码,当我输入密码并按enter键时,它会继续执行并给我成功的消息 现在我想在java中使用Runtime.execute(…)以编程方式做同样的事情;在提示输入密码(我正在读取命令提示符的输出)之前,它工作正常,但当cmd output提示输入密码时,我不知道如何显示一个对话框,在该对话框中我可以输入密码,并且使用该密码,我的程序继续执行并成功完成。我想在命令提示符下手动执行相同的操作 所以问题是,

我有一个用于构建过程的ant命令,当我在命令提示符下执行该命令时,在执行之间,它会提示我输入一些密码,当我输入密码并按enter键时,它会继续执行并给我成功的消息

现在我想在java中使用Runtime.execute(…)以编程方式做同样的事情;在提示输入密码(我正在读取命令提示符的输出)之前,它工作正常,但当cmd output提示输入密码时,我不知道如何显示一个对话框,在该对话框中我可以输入密码,并且使用该密码,我的程序继续执行并成功完成。我想在命令提示符下手动执行相同的操作

所以问题是,是否有可能通过Runtime.execute在命令执行之间输入参数,以及如何通过AT参数恢复命令执行如果是,如何

这是一个执行命令的swing应用程序,我想使用swing Ui对话框获取密码

根据Andy Thomas的建议更新了我的代码:

Process p1 =Runtime.getRuntime().exec("cmd /C my command", null, myProject);
BufferedReader in = new BufferedReader(  
                            new InputStreamReader(p1.getInputStream()));  
String line = null;  

while ((line = in.readLine()) != null) {  
   System.out.println(line);
   if(line.contains("Please enter password")){
       System.out.println("Prompting for password ");
       OutputStream child_stdin = p1.getOutputStream();
       BufferedWriter child_writer = new BufferedWriter(new OutputStreamWriter( child_stdin ));
       child_writer.write( "password123" );
        child_writer.flush();

            }

        }  

    }

但不起作用。

当调用
Runtime.exec()
时,会返回一个表示子进程的进程对象

  • 读取子进程的输出流(由提供),直到检测到密码请求
  • 请用户输入密码,最好使用,以便隐藏密码
  • 为流程的输入流提供密码,由提供
  • 保持读取子进程的输出流,否则子进程可能会阻塞 编辑:下面是一个草图(未经测试),根据下面的评论要求,您将如何向子进程写入
    字符串userPassword
    。这个省略从子进程的输出流读取的部分,如果没有该部分,子进程可能会阻塞

        Process process = Runtime.getRuntime().exec("...");
        ...
        OutputStream child_stdin = process.getOutputStream();
        BufferedWriter child_writer = new BufferedWriter(new OutputStreamWriter( child_stdin ));
        child_writer.write( userPassword );
        child_writer.newLine();  // suggested by OP
        child_writer.flush();
    

    或者,将密码从安全文件加载到
    ant
    ,如图和所示。

    是否希望用户在控制台中输入?或者在swing gui中?在swing gui中,我想使用swing only创建一个对话框,用户将输入pass并单击ok,然后按ok将使用给定的密码值继续执行。这是100%可能的,您所需要的只是登录按钮的简单操作侦听器,然后需要验证密码。如果所有其他方法都检查出了just run your executable。这很简单,只需创建一个JDialog add 2 textfield one for user anohter for pass,一个按钮,和
    addActionListener
    到按钮如何在执行cmd commad之间传递参数?在OP澄清后进行了显著编辑。我可以得到一些关于如何使用Process.getOutputStream输入密码的代码片段吗?我没有得到任何信息。什么都没有发生。添加命令后,我应该做些什么来继续该命令上面的代码片段。这辆车在那里被卡住了,只是它不能再往前走了。你把车换了吗。。。上面介绍了如何读取子进程的输出流?最后,它运行良好@Andy您只需添加
    child_writer.newLine()冲水前,我可以接受你的答案。