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...
}
}
这是我的问题,我有一个 .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...
}
}