Java Runtime.exec可以使用stdin的另一个java程序吗? [英] Can Java Runtime.exec another java program that uses stdin?

查看:100
本文介绍了Java Runtime.exec可以使用stdin的另一个java程序吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到了一个问题,当使用Java Runtime运行另一个java程序时,程序冻结,因为其他程序需要stdin。在使用Runtime exec()执行另一个java程序后处理stdin时出现问题。

I have run into an issue where , when using Java Runtime to run another java program, the program freezes because the other program requires stdin . There is a problem with handling the stdin after executing another java program with Runtime exec() .

这是我无法工作的示例代码。这甚至可能吗?

Here is sample code that I can't get to work. Is this even possible?

import java.util.*;
import java.io.*;

public class ExecNoGobble
{
    public static void main(String args[])
    {
        if (args.length < 1)
        {
            System.out.println("USAGE: java ExecNoGobble <cmd>");
            System.exit(1);
        }

        try
        {            
            String[] cmd = new String[3];
                cmd[0] = "cmd.exe" ;
                cmd[1] = "/C" ;
                cmd[2] = args[0];
            Runtime rt = Runtime.getRuntime();
            System.out.println("Execing " + cmd[0] + " " + cmd[1] + " " + cmd[2]);
            Process proc = rt.exec(cmd);
            int exitVal = proc.waitFor();
            System.out.println("ExitValue: " + exitVal);        
        } catch (Throwable t)
          {
            t.printStackTrace();
          }
    }
}

和ReadInput.java文件:

And the ReadInput.java file:

import java.io.*;

public class ReadInput {

   public static void main (String[] args) {

      //  prompt the user to enter their name
      System.out.print("Enter your name: ");

      //  open up standard input
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

      String userName = null;

      //  read the username from the command-line; need to use try/catch with the
      //  readLine() method
      try {
         userName = br.readLine();
      } catch (IOException ioe) {
         System.out.println("IO error trying to read your name!");
         System.exit(1);
      }

      System.out.println("Thanks for the name, " + userName);

   }

}  // end of ReadInput class

最后,启动它的批处理文件:

And, finally , the batch file that launches it:

@echo off

echo.
echo Try to run a program  (click a key to continue)
echo.
pause>nul
java ExecNoGobble "java -cp . ReadInput"
echo.
echo (click a key to end)
pause>nul

我也是在这里发布了这个问题:
http://forums.oracle.com/ forums / message.jspa?messageID = 9747449

I also posted the question here: http://forums.oracle.com/forums/message.jspa?messageID=9747449

推荐答案

调用方法 Process.getOutputStream 并将输入提供给返回的输出流。

Call the method Process.getOutputStream and feed your input to the returned output stream.

api docs


public abstract OutputStream getOutputStream()

获取子流程的输出流。输出到流是
管道输入流程的标准输入流,由
表示此Process对象。

Gets the output stream of the subprocess. Output to the stream is piped into the standard input stream of the process represented by this Process object.

实施说明:这是一个很好的输出流的想法是
缓冲。

Implementation note: It is a good idea for the output stream to be buffered.

Returns:

输出流连接到
子流程的正常输入。

the output stream connected to the normal input of the subprocess.

这篇关于Java Runtime.exec可以使用stdin的另一个java程序吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆