Java - Runtime.getRuntime().exec() 按键事件

Java - Runtime.getRuntime().exec() Key event

这是我的问题,我有一个 .bat 必须做:

@echo off
echo "Hello world!"
pause

我的回答是,当 java 程序使用 Runtime.getRuntime().exec(FullCommand)?

在我的 java 代码中,我使用所有通量(输入流、输出流、错误流,进入单独的线程) 我已经尝试用 BufferedReader 接电话,但是如果我不使用我的输出流来模拟按键 ,"Press Any Key" 就不会出现使用 newLine(); 输入 ,因为进程不想结束。

所以我想知道是否有技巧可以知道进程何时等待,或者是否有办法在输入键方法之前捕获输入流 "Press Any Key",然后使用输出流方法(因为我不知道我不想对我 运行).

的所有脚本使用此方法

1) Run Exec

proc = Runtime.getRuntime().exec(FullCommand);
try {
Ti = new Thread(new DisplayInputStream(proc.getInputStream())); 
Te = new Thread(new DisplayDebugStream(proc.getErrorStream()));

Ti.start();
Te.start();

proc.waitFor();
Ti.join();                                                      
Te.join();
}
......

2) InputStream method

BufferedReader br = getBufferedReader(inputStream);
setInfosProcess(null);
try {
    while ((StrInprocess = br.readLine()) != null) {
        if(???) //Condition Press Event key
        {
            Thread To;
            To = new Thread(new DisplayOutputStream(proc.getOutputStream()));
            To.start();
        }
        if (getInfosProcess() == null) {
            setInfosProcess(StrInprocess + "\n");
        } else {
            setInfosProcess(getInfosProcess() + StrInprocess + "\n");
        }
    }
} 
......

3) OutputStream method

BufferedWriter bwr = getBufferedWriter(outputStream);
        setOutputProcess(null);

        try { 
            bwr.newLine();// Simulate pressing of the Enter key
            bwr.flush();// Flush the stream, otherwise it doesn't work
        } 
        ......

debug

        run:
        Hello world! Test:-1 //To compare string with what i want
        //"Press Any Key" from pause don't come
        //infinite loop caused by **pause**

感谢您的帮助。

你将不得不听按键 了解 java.awt.event.KeyListener

f.addKeyListener(new KeyListener() {
    @Override
    public void keyTyped(KeyEvent e) {
    }

    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println("Key pressed code=" + e.getKeyCode() + ", char=" + e.getKeyChar());
    }

    @Override
    public void keyReleased(KeyEvent e) {
    }
});

您可以一个字符一个字符地阅读(或一次一组字符)而不是逐行阅读。

BufferedReader br = getBufferedReader(inputStream);
setInfosProcess(null);
char[] cbuf = new char[1024]; // Adjust the length of the array to suit your needs.
StringBuilder outputBuilder = new StringBuilder();
try {
    while ((StrInprocess = br.read(cbuf)) != -1) {
         outputBuilder.append(cbuf); // You will get the "Press Any Key" text as soon as it appears.
         // Whatever you want to do here with the outputBuilder object...
    }
}