【发布时间】:2016-04-14 23:18:01
【问题描述】:
我正在使用 vlcj 阅读媒体,我想在一些 JLabel 中显示经过的时间和剩余时间。我写了一些代码,但我的 JLabel.setText 似乎每秒刷新不超过 2 次。
为了进行更多尝试并确保不是 vlcj 的线程会出现问题,我用 JLabel 编写了一个非常代码。这个简单代码的目的是每秒更新 JLabel 10 次。
这是我的代码:
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class TestLabel extends JFrame implements Runnable{
JLabel label = new JLabel("0");
int i=0;
TestLabel() {
this.setTitle("Test");
this.setSize(200, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(label);
this.setVisible(true);
}
public static void main(String[] args) {
TestLabel tLabel = new TestLabel();
Thread t1 = new Thread(tLabel);
t1.start();
}
@Override
public void run() {
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
i+=1;
System.out.println(i);
label.setText(String.valueOf(i));
}
}, 0, 100, TimeUnit.MILLISECONDS);
}
}
结果:在控制台中,我得到 1、2、3、4... 但在 JLabel 中,我有类似:1、2、3 (...) 32、37、42、47。它似乎 System.out.println 写了每个“i”,但 JLabel 没有。为什么我有这个神器?
感谢您的所有回复。问候。
【问题讨论】:
标签: java jlabel java-threads