来自cmd.exe控制台的Java应用程序'窃取'stdin

时间:2012-03-13 22:16:58

标签: java

我正在尝试将Windows应用程序作为Windows 7下的衍生子进程运行。 我正在使用的命令是:java -cp ...list of libs... 问题是,一旦应用程序加载,它就没有自己的stdin流但是尝试使用它的父stdin,这导致命令无法传递给它。 是否有任何'java.exe'参数可以解决这种行为,所以子进程将拥有自己的stdin? 感谢

更新 对不起,我不是一个java程序员,但这可能是因为我正在运行的java应用程序中的这一行:

this(new IO(System.in, System.out, System.err), STANDARD_INPUT_PROMPT, STANDARD_RESULT_PROMPT);

如果是,那么System.in的适当替代是什么?

1 个答案:

答案 0 :(得分:0)

为什么不启动一个生成子进程的新命令提示符?我没有为Windows环境编写太多程序,但我有以下工作:

public class Main {
  public static void main(String [] args) {
    try {
        Runtime.getRuntime().exec("cmd /k start cmd /k echo hello");
    } catch (Throwable t) {
        t.printStackTrace();
    }
  }
}

如果用你的子进程程序替换echo并用必要的参数替换你好,那么你应该全部设置为接收stdin。换句话说:

Runtime.getRuntime().exec("cmd /k start cmd /k java -cp ...list of libs...");

顺便说一句,可能有一种更漂亮的方法。