- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 vlcj 阅读媒体,我想在一些 JLabels 中显示已用时间和剩余时间。我写了一些代码,但似乎我的 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 不写。为什么我会有这个 Artifact ?
谢谢大家的回复。问候。
最佳答案
除了事件分派(dispatch)线程之外,您不得使用来自其他线程的 swing 组件。
所以,要么使用 Swing Timer而不是 ScheduledExecutorService,或者将标签更改包装到 SwingUtilities.invokeLater()
中。
顺便说一句,对 new TestLabel();
的调用也应该包装到 SwingUtilities.invokeLater()
中。阅读swing concurrency tutorial .
关于java - 我的 JLabel 刷新速度不快。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34708132/
我可以使用 IntelliJ 浏览可用的 javadoc 吗? 例如,我在 Maven 中配置了一些库,它的 javadoc 仅在 Maven 存储库上可用。 懒得手动下载,解压后用浏览器打开。 是否
我是一名优秀的程序员,十分优秀!