gpt4 book ai didi

java - 如何在 jtextarea 上 append 文本

转载 作者:行者123 更新时间:2023-11-30 04:02:26 31 4
gpt4 key购买 nike

当我按下按钮时,我想在执行方法之前在 JTextArea 中显示文本。我使用 jTextArea.append() 和 jTextArea.settext() 但文本在方法执行后出现。我的代码:

    //...JTextArea jTextArea;
JButton btnGo = new JButton("Start");
btnGo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jTextArea.append("line before\n");
myMethodFromOtherClass();
jTextArea.append("line after\n");
}
}

有什么建议吗?

最佳答案

actionPerformed() 方法由处理所有 GUI 相关事件的 EDT(事件调度程序线程)调度。在 actionPerformed() 方法完成执行之前,不会更新在该方法内执行的更新。要解决此问题,请在另一个线程中执行 myMethodFromOtherClass(),并且仅在该方法之后对最终更新事件 (jTextArea.append("line after\n");) 进行排队在第二个线程中完成执行。

对此的粗略演示如下所示:

JButton btnGo = new JButton("Start");
btnGo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//Leave this here
jTextArea.append("line before\n");

//Create new thread to start method in
Thread t = new Thread(new Runnable(){
public void run(){
myMethodFromOtherClass();

//Queue the final append in the EDT's event queue
SwingUtilities.invokeLater(new Runnable(){
public void run(){
jTextArea.append("line after\n");
}
});
}
});

//Start the thread
t.start();
}
}

如果需要设计更优雅的解决方案,请查看 SwingWorker它基于非常相似的过程,但具有更高级的功能。

关于java - 如何在 jtextarea 上 append 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21649981/

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