gpt4 book ai didi

java - jFrame新线程

转载 作者:行者123 更新时间:2023-12-02 03:34:23 25 4
gpt4 key购买 nike

你能帮我做一个执行Windows cmd命令的简单程序吗?通过单击 jbutton3,我想使用 PING 命令执行代码,并在文本框中设置参数,但问题是在执行过程中整个窗口卡住。我尝试在单击按钮后运行新线程,但窗口仍然卡住,您能指出我做错了什么吗?

public class GUI extends javax.swing.JFrame implements ActionListener{

public GUI() {
initComponents();
}

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {

Thread worker = new Thread()
{

public void run()
{
SwingUtilities.invokeLater(new Runnable()
{

public void run()
{
try
{
Runtime rt2 = Runtime.getRuntime();

String IP2, COUNT;
IP2 = jTextField4.getText();
COUNT = jTextField3.getText();
Process pr = rt2.exec("cmd /c ping -n " + COUNT + " " + IP2);

BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));

String line=null;

while((line=input.readLine()) != null) {
jTextArea1.append(line + "\n");
jTextArea1.repaint();
jTextArea1.update(jTextArea1.getGraphics());
System.out.println(line);
}
jTextArea1.append("\nCOMPLETED!\n");
jTextArea1.repaint();
jTextArea1.update(jTextArea1.getGraphics());
int exitVal = pr.waitFor();
System.out.println("Exited with error code "+exitVal);

}
catch(Exception e)
{
System.out.println(e.toString());
e.printStackTrace();
}
}
});
}
};
worker.start();
}

public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new GUI().setVisible(true);

}
});

}

}

最佳答案

是的,你有一个后台线程,它立即创建另一个 Runnable 来调用你的长时间运行的进程在 Swing 事件线程上运行——它不应该运行的确切位置(通过将 Runnable 传递到SwingUtilities.invokeLater 方法)。

解决方案:在后台线程中运行较长的内容,该线程在 Swing 事件线程中运行,并且仅在事件线程中运行 Swing 代码。

阅读:Concurrency in Swing

关于java - jFrame新线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37613683/

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