繁体   English   中英

Thread.sleep无法在paintComponent中正确显示图像

[英]Thread.sleep not displaying image properly in paintComponent

绘制BufferedImage ,不会显示transition图像。 我正在尝试创建一个游戏,其中当用户获胜时,它将显示一个加载过渡屏幕,然后转到img2屏幕。 我想创建一个1或2秒的延迟,使其看起来好像第二级正在加载中,但是当我添加thread.sleep时,它会延迟它但不显示transition图像,而是直接跳转到img2 我尝试创建单独的标志,方法并增加时间,但似乎无济于事!

下面是paintComponenet方法(我尝试将其分离为单独的方法):

protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    if (img != null) {
        Graphics2D g2d = (Graphics2D) g.create();
        g2d.drawImage(img, 0, 0, this);
        if (win1 == true) {
            try {
                Thread.sleep(1000);
            } catch (Exception exc) {
            }
            g2d.drawImage(transition, 0, 0, this);
            try {
                Thread.sleep(1000);
            } catch (Exception exc) {
            }
            g2d.drawImage(img2, 0, 0, this);
        }
    }
}

解释也将非常有帮助!

所有绘制都在事件调度线程上完成。

当您在paintComponent()方法中调用Thread.sleep()时,GUI将无法重新绘制自身,直到所有代码执行完毕,这意味着只有最后一张图像最终会被绘制,因为两个绘制请求将合并为一个。 阅读Swing 并发教程中的有关更多信息的部分。

不要在绘画方法中使用Thread.sleep()。

更好的解决方案是什至不做定制绘画。 相反,您可以只使用JLabel并更改标签的Icon

然后,您可以使用Swing计时器来安排动画。 因此,您需要设置图标,然后将计时器设置为在2秒内触发。 当计时器触发时,您将重置标签的图标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM