Java-Runtime.getRuntime().exec()键事件
这是我的问题,我有一个.bat,他必须: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
@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...
}
}