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

Java-Runtime.getRuntime().exec()键事件,java,multithreading,events,runtime,Java,Multithreading,Events,Runtime,这是我的问题,我有一个.bat,他必须: @echo off echo "Hello world!" pause 我的答案是,当java程序使用Runtime.getRuntime().exec(FullCommand)时,是否有方法捕获事件“按任意键”(来自外部程序) 在我的java代码中,我使用所有通量(inputstream、outputstream、errorstream,进入单独的线程) 我已经试着用一个BufferedReader捕捉这一行,但是如果我不使用outputstream

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

@echo off
echo "Hello world!"
pause
我的答案是,当java程序使用Runtime.getRuntime().exec(FullCommand)时,是否有方法捕获事件“按任意键”(来自外部程序)

在我的java代码中,我使用所有通量(inputstream、outputstream、errorstream,进入单独的线程) 我已经试着用一个BufferedReader捕捉这一行,但是如果我不使用outputstream用newLine()模拟按键Enter,“按任意键”就不会出现;,因为这个过程不想结束

所以我想知道是否有一个技巧可以知道进程何时等待,或者是否有一种方法可以在Enter键方法之前捕获inputstream“按任意键”,在Enter键方法之后使用outputstream方法(因为我不想对我运行的所有脚本都使用此方法)

1)
runexec

2)
InputStream
方法

3)
OutputStream
方法

调试


需要任何帮助。

您必须听一听按键 了解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...
    }
} 

我不认为这是op所要求的KeyListener会捕捉到我按下的键,但这不是我想要的,我只想捕捉来自外部程序的输入,该程序说我需要按下某个键。嗨,问题是进程等待按键继续他必须做的事情(在这种情况下退出),所以缓冲区无法读取“按任意键“在我使用输出方法之前暂停,这真的很奇怪。你试过我的答案了吗?”?您仍然没有按任何键获得
文本?奇怪。。。你可能在别的地方有问题。。。我尝试了代码,outputBuilder的文本
按任意键…
很好…我终于明白了为什么这对我不起作用,当我使用br.read和outputBuilder时,我在缓冲区中有一些[null]和空间,但句子的一部分是“Press Any”,所以,我必须修复这个问题,这将很好。谢谢你的帮助。
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
        } 
        ......
        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**
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...
    }
}