gpt4 book ai didi

java - 多次通过单击 swing 中的按钮更改标签文本不起作用

转载 作者:行者123 更新时间:2023-12-01 19:02:29 25 4
gpt4 key购买 nike

我需要通过在swing中单击按钮多次更改jlabel.text。在此代码中,我需要将标签文本设置为在 dowork() 函数之前开始,并将其设置为在中间进行,并将其设置为在 dowork() 之后结束(jlabel 中的状态类型和 dowork 执行时间较长):

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
status.setText("start");
try {
Thread.sleep(10000);
} catch (InterruptedException ex) {
Logger.getLogger(PelakInRFID.class.getName()).log(Level.SEVERE, null, ex);
}
status.setText("in progress");
dowork();
try {
Thread.sleep(10000);
} catch (InterruptedException ex) {
Logger.getLogger(PelakInRFID.class.getName()).log(Level.SEVERE, null, ex);
}
status.setText("end");

}

在此代码中,状态仅设置为结束而开始不显示。

最佳答案

我会尝试使用 SwingWorker 实例(特别是它的 doInBackground 方法)来执行您当前在 doWork 上执行的操作与主 UI 线程不同的线程。按照它的编写方式,您的监听器方法必然会在执行期间卡住用户界面,正如您所说,这可能会花费很长时间,从而导致糟糕的用户体验。

JLabel 文本的更改可以在三个不同的地方发生:首先,在调用(即启动)SwingWorker 上的 execute 之前;其次,使用 SwingWorker 提供的 publish/process 机制在用户界面上发布中间结果;第三,在 done 方法中,一旦 SwingWorker 完成其 doInBackground 方法的执行,就会在 UI 线程上再次调用该方法。

引用文献:Oracle关于worker threads and SwingWorker的教程, JavaDoc API documentation of the SwingWorker class .

关于java - 多次通过单击 swing 中的按钮更改标签文本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11656927/

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