作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个java gui,我想在按下一个按钮时在我的GUI 中运行一个可执行文件。我运行可执行文件的代码如下:
Process pr;
Runtime rt = Runtime.getRuntime();
new Thread(() -> {
try {
Process proc = rt.exec("Release\\face.exe", null, new File("Release\\"));
} catch (Exception e1) {
e1.printStackTrace();
}
}).start();
当我按下按钮时,可执行文件正在运行,但我检测到可执行文件行为卡住。我尝试添加多线程来检查这是否是卡住的原因,但我仍然遇到同样的事情。这里可能出了什么问题?
编辑:我尝试在我的线程中为 inputStreamReader 添加以下行:
new Thread(() -> {
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("face.exe", null, new File("Release\\"));
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
BufferedReader err = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}).start();
我收到消息 InputStreamReader
无法解析为类型。
最佳答案
正如 Bowmore 提到的,您的可执行文件可能会阻塞,因为输出未得到处理,并且在一段时间后“卡住”,因为可执行文件无法向其标准输出(可能是控制台)写入更多内容。
我通常使用如下代码从 java 运行外部命令:
Process p = Runtime.getRuntime().exec(args);
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
StreamHandler outputHandler = new StreamHandler(in);
outputHandler.start();
StreamHandler errorHandler = new StreamHandler(err);
errorHandler.start();
其中StreamHandler定义如下:
class StreamHandler extends Thread {
private final BufferedReader in;
private final JTextArea[] textArea;
public StreamHandler(final BufferedReader in) {
this.in = in;
}
@Override
public void run() {
try {
String line = null;
while ((line = this.in.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
log.info("StreamHandler got interrupted");
e.printStackTrace();
}
}
}
当然,流处理程序可以更复杂,例如将错误写入 System.err 而不是 System.out,或者写入 JTextArea 或其他位置。
关于java - 在java中使用多线程时卡住窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37205477/
我是一名优秀的程序员,十分优秀!