java - JLabel Icon 未使用 setIcon (或其他冗余)更新

标签 java swing icons jlabel

我正在使用两个不同版本的代码,如上所述,第一个版本工作正常,没有任何问题,第二个版本,唯一没有发生的是图像的更新(已验证)通过逐步调试和调试打印来手动验证所有值和条件)

            /* properly updates dice[] JLabel icons */

            for (int i = 0; i < game.getToRoll(); i ++){
                    //sets rolled dice to actual values
                    dice[i].setIcon(dicePic[(game.getDice(i).getFaceValue())]);    
            }

            /* loops properly, generates properly, does not update icons */

            Die x = new Die();
            int animate = 0;

            while(animate < 10){
                    for (int i = 0; i < 6; i++ ){
                            x.roll();

                            if (i <= (game.getToRoll() -1))
                                    dice[i].setIcon(dicePic[x.getFaceValue()]);                            
                            else   
                                    dice[i].setIcon(dicePic[0]);
                    }
                    panel[1].repaint();
                    panel[1].validate();

                    animate++;
                    try{
                            Thread.sleep(100);
                    }
                    catch(Exception e){
                            e.printStackTrace();
                    }
            }

我一直在寻找导致问题的原因,除了“有时重新绘制和验证会修复不起作用的问题”之外,我没有遇到任何其他问题。/p>

如上所述,调试为我打开了代码流完全按预期工作的绿灯,只是第二个示例中的空图像图标。

最佳答案

问题是 Thread.sleep(100); 图标确实发生了变化,但您看不到变化,因为您阻塞了 UI 线程。

所以规则是:永远不要 hibernate EventDispatchThread!

我的建议是使用 Timer :

new javax.swing.Timer(200, new ActionListener() {
    @Override
    public void actionPerformed(final ActionEvent e) {
        //do an icon change
    }
}).start();

关于java - JLabel Icon 未使用 setIcon (或其他冗余)更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17129681/

相关文章:

java - 从 .txt 文件中读取数据并将其存储在 JTable 中

ios - 添加没有自定义图像的 iOS 关闭按钮图标

objective-c - NSUserNotification - 小牛和自定义图像

java - 通用数据类型数组创建,其中类型是内部类

java - 自定义日期反序列化: Jackson

java - PlayFramework 内存设置选项不受尊重

java - ImageIcon 方法无限循环

java - 二进制搜索程序将编译并运行但不会完成并且不会终止?

Java 容器未显示

css - 三列,中间列带有绝对图标