我的应用程序是采取ccpp文件,并编译它,然后运行它。一切似乎都很完美。但是当用户忘记输入而c程序需要输入时,程序停止工作。那么有没有办法知道c++程序是否需要用户输入,这样我就可以处理用户忘记输入的情况呢?如果不是,我该怎么处理这种情况?
我的run函数代码是:
public void runFile(String input) {
try {
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command("bash", "-c", "./a.out");
Process process = processBuilder.start();
BufferedOutputStream writer = new BufferedOutputStream(process.getOutputStream());
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
writer.write((input + "\n").getBytes());
writer.flush();
String s = null;
// Read the output from the command:
textArea2.setText(stdInput.readLine());
while ((s = stdInput.readLine()) != null)
textArea2.setText(textArea2.getText() + "\n" + s);
// Read any errors from the attempted command:
if((s = stdError.readLine()) != null) {
textArea2.setText(s);
while ((s = stdError.readLine()) != null) {
textArea2.setText(textArea2.getText() + "\n" + s);
}
}
} catch (Exception e) {
textArea2.setText(e.toString());
e.printStackTrace();
}
}
1条答案
按热度按时间smtd7mpg1#
在对这个bug进行了大量搜索和阅读之后,我发现没有办法知道进程是否在写入输出之前等待输入,也没有办法进入
Process
类来停止java程序冻结和停止工作,例如,当c++程序需要两个输入,而用户只输入一个输入时。如何处理这种情况:我曾经
Thread
如下面的新代码所示,在这种情况下保持java程序的活动性并阻止它被冻结。编辑:在洛恩侯爵的评论之后,我处理了没有输入而c++应用程序需要输入的情况。