java - 不确定的 JProgressBar 动画滞后
问题描述
使用以下代码
package scrollbartest;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
public class ScrollBarTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JProgressBar b = new JProgressBar();
b.setIndeterminate(true);
b.setPreferredSize(new Dimension(400, 20));
f.add(b);
f.pack();
f.setVisible(true);
});
}
}
进度条“无限期”动画非常缓慢。我究竟做错了什么?
更多信息:
- 操作系统:Debian 9.8
- 该代码似乎可以在其他操作系统上顺利运行(在 Windows 上尝试过)
- 发生在 oracle JDK 1.8.0_201 和 OpenJDK 1.8.0_181 中
- 在主 JFrame 上连续移动鼠标光标可以让动画流畅运行
- 效果随选择的观感而变化:GTK+比系统默认好,但效果还是有的
由于第四点,我认为这是一种缓慢的“刷新时间”……这可能吗?
谢谢你的帮助!
更新: 做了一些研究,我发现可以控制不确定的进度条动画在当前外观中设置一些参数:
ProgressBar.repaintInterval
ProgressBar.cycleTime
不幸的是,有些外观似乎忽略了第一个参数,而另一些则没有。例如,MetalLookAndFeel 似乎忽略了它,导致动画滞后,重绘时间约为 0.5 秒,而 NimbusLookAndFeel 似乎使用它。
解决方案
如果在您的操作系统中未启用,请尝试添加以下行以启用视频加速:
System.setProperty("sun.java2d.opengl", "true");
推荐阅读
- c# - 将pdf JBIG2Decode过滤器转换为图像c#
- r - 如何使用 editable = TRUE 参数从 DT::renderDT 更改 colnames?
- actions-on-google - Action 已通过认证测试,但仍无法在 Google Home 应用中找到
- c++ - 为什么表达式 (int) +1e10 不会产生 CSAPP 描述的 -2147483648?
- python - 我如何做到这一点,当我打印 Python 列表时,当我打印列表时,每个项目都没有单引号和括号?
- visual-studio-code - 如何配置 svelte 格式化程序以尊重 HTML 中的换行符?
- javascript - 如何从 Chrome 控制台单击时调用 html 函数?
- c - 如何在C中读取和扫描文件的结构记录
- javascript - 如何动态显示消息 react-router-dom
- javascript - Nightwatch JS 中的异步命令执行