【发布时间】:2026-01-30 13:25:01
【问题描述】:
我有一个创建 JFrame 的类,并且需要在 JFrame 中显示一个图像。图片必须每隔几秒旋转一次。
我已经尝试在 JFrame 和 JPanel 上使用 repaint()、revalidate() 和 validate(),但似乎都没有效果。以下是我当前更新 JFrame/JPanel 的代码。此代码将等待 4 秒,然后显示第四张图片,但我希望它每秒更新一张新图片。
public void startSlideshow(){
int i = 0;
Long oldTime = System.currentTimeMillis();
do {
Long currentTime = System.currentTimeMillis();
if( currentTime - oldTime >= 1000 ) {
img = new JLabel(new ImageIcon("Albums/" + album + "/" + imageNames.get(i)));
panel.removeAll();
panel.setBackground(Color.BLACK);
panel.add(img);
panel.revalidate();
panel.repaint();
i++;
oldTime = System.currentTimeMillis(); // reset reference time
}
} while(i<imageNames.size());
panel.removeAll();
panel.setBackground(Color.BLACK);
panel.add(img);
panel.getRootPane().revalidate();
panel.repaint();
}
非常感谢任何帮助,因为我已经有一段时间了。谢谢。
【问题讨论】:
-
即使这样有效,因为您使用的是忙等待循环,这将是一场灾难。 D:
-
@Boann 这不起作用,在这场灾难之前我已经尝试了大约 10 个不同的版本。谢谢。
-
你在哪里管理 1 秒的等待?
-
使用循环等待(即使在专用线程上)效率极低,因为它只会消耗宝贵的 CPU 周期。您最好在此处使用
Timer或在单独的线程中使用sleeping,并通过SwingUtilities在EDT 上调度绘制请求。