gpt4 book ai didi

java - 在java中使用多线程时卡住窗口

转载 作者:行者123 更新时间:2023-12-02 03:38:01 26 4
gpt4 key购买 nike

我有一个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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com