gpt4 book ai didi

java-如何在单击按钮时停止进程

转载 作者:行者123 更新时间:2023-11-30 05:03:28 24 4
gpt4 key购买 nike

我正在尝试创建带有启动和停止进程按钮的 GUI。单击“开始”按钮时,将启动一个进程,当用户单击“停止”按钮时,它应该停止正在运行的进程,但当进程启动时,控制永远不会返回到原始 GUI。 有人可以解决吗? 代码片段如下:-

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {                                         
// TODO add your handling code here:
try {
jTextArea1.setText("\nC:\\peach\\peach.bat --debug "+jFormattedTextField4.getText()+"\n\n");
if(jFormattedTextField4.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Browse The Peach File First");
}
else
{

String line=new String(jFormattedTextField4.getText());
OutputStream stdin = null;
InputStream stderr = null;
InputStream stdout = null;

// launch EXE and grab stdin/stdout and stderr
//process = Runtime.getRuntime ().exec("C:\\peach\\peach.bat --debug "+line);
stdin = process.getOutputStream ();
stderr = process.getErrorStream ();
stdout = process.getInputStream ();
stdin.close();

// clean up if any output in stdout
BufferedReader brCleanUp = new BufferedReader (new InputStreamReader (stdout));
while ((line = brCleanUp.readLine ()) != null) {
System.out.println ("[Stdout] " + line);
jTextArea1.append("[Stdout]-->"+line+"\n");
}
brCleanUp.close();

// clean up if any output in stderr
brCleanUp = new BufferedReader (new InputStreamReader (stderr));
while ((line = brCleanUp.readLine ()) != null) {
System.out.println ("[Stderr]-->" + line);
jTextArea1.append("[Stderr]"+line+"\n");
}
brCleanUp.close();

}

}
catch (Exception err) {
err.printStackTrace();
}

}

private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {
//TODO 在此处添加您的处理代码:

    process.destroy();    

}

最佳答案

以下行:

    while ((line = brCleanUp.readLine ()) != null) {

等待stdout流的结尾。当您等待子进程 stdout 结束时,您的程序将不会继续,因此您的事件循环未运行,您将无法再按任何按钮。

要解决此问题,您需要定期从 brCleanUp 读取数据,同时仍让 GUI 事件循环运行。

关于java-如何在单击按钮时停止进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5896075/

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