我试图从java端接管另一个应用程序。
接管这里意味着获取另一个应用程序的输出并输入命令。
我使用的代码:
public class ProcessTest implements Runnable{
BufferedReader reader;
PrintWriter writer;
Thread readThread;
boolean terminate = false;
public ProcessTest(){
try{
initialize();
}catch(Exception e){
}
}
public void initialize() throws Exception{
ProcessBuilder builder = new ProcessBuilder("another_application.exe");
builder.redirectErrorStream(true);
Process process = builder.start();
InputStream is = process.getInputStream();
OutputStream os = process.getOutputStream();
InputStreamReader isr = new InputStreamReader(is);
OutputStreamWriter osw = new OutputStreamWriter(os);
reader = new BufferedReader(isr);
writer = new PrintWriter(osw);
readThread = new Thread(this);
readThread.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
while(terminate == false){
int c;
try {
c = reader.read();
if(c == -1){
return;
}
System.out.println(c);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void input(String str){
writer.write(str);
writer.println();
writer.flush();
}
public static void main(String args[]){
ProcessTest obj = new ProcessTest();
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
String str = scan.nextLine();
obj.input(str);
}
scan.close();
}
}
开始时,我可以使用writer
向应用程序输入命令,并使用reader
来获取其输出。
在输入特定命令之前,reader
和writer
都正常工作。
输入命令后(命令的效果:1,将应用程序的状态从配置更改为运行; 2,输出很多)。 reader
继续有效,但不是writer
。应用程序无法显示作者输入的任何响应。
我在我的智慧'最后,请告诉我可能的原因为什么会出现这样的问题。我试图接管的申请是公司内部申请,所以我还没有给你起名。