小编典典

通过单击秋千中的按钮几次更改标签文本不起作用

java

我需要通过摆动中的一个单击按钮多次更改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");

 }

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


阅读 197

收藏
2020-11-30

共1个答案

小编典典

我将尝试使用SwingWorker实例(尤其是其doInBackground方法)在doWork与主UI线程不同的线程上执行当前正在执行的操作。按照编写方式,您的侦听器方法势必会在执行期间冻结用户界面,正如您所说的那样,这可能会很长一段时间,从而导致不良的用户体验。

更改JLabel文本可以在三个不同的地方进行:首先,在调用execute(即开始)之前SwingWorker;其次,使用publish/
process机制SwingWorker在用户界面上发布中间结果;第三,在done方法中,在方法SwingWorker执行完毕后立即在UI线程上再次调用它doInBackground

参考资料:Oracle的有关工作线程SwingWorker的教程以及该类的
JavaDoc API
文档SwingWorker

2020-11-30