尝试在Java中设置骰子滚动动画

尝试在Java中设置骰子滚动动画,java,image,dice,Java,Image,Dice,我正在尝试用Java“动画化”掷骰子。我目前设置了一个图标(称为“diceImage”),当点击一个按钮(称为“diceRoll”)时,它会更新到一个新的模具面随机图像。我想做的是让它在几秒钟内多次改变图像(变成一个随机的模具面),然后在最终图像上停止 我遇到的问题不是生成一个随机数,或者多次滚动它,而是在一个循环中多次更新图像。到目前为止,我掌握了以下代码,它将模具旋转10次: private void diceRollActionPerformed(java.awt.event.Action

我正在尝试用Java“动画化”掷骰子。我目前设置了一个图标(称为“diceImage”),当点击一个按钮(称为“diceRoll”)时,它会更新到一个新的模具面随机图像。我想做的是让它在几秒钟内多次改变图像(变成一个随机的模具面),然后在最终图像上停止

我遇到的问题不是生成一个随机数,或者多次滚动它,而是在一个循环中多次更新图像。到目前为止,我掌握了以下代码,它将模具旋转10次:

private void diceRollActionPerformed(java.awt.event.ActionEvent evt) {                                         

    for (int i = 1; i <= 10; i++) {
        rollDice();
        pause(100);
    }
}   
下面的方法是“假定”在更新图像之间短暂暂停程序(这是从我参加的一个编程课程中获取的,在该课程中,我们必须为屏幕上移动的汽车图像设置动画):

这个程序所要做的就是暂停,然后打印最后的骰子卷。它不显示任何“中间”面。有人知道为什么这不起作用吗


非常感谢您的帮助。

这个问题一天要问好几次。如果您在事件调度线程中休眠,则会阻止它执行其工作:对事件作出反应并重新绘制屏幕

你的动画应该在另一个线程中完成。阅读有关的教程,并使用摆动计时器。

您使用的暂停()是指当您需要为移动的物体(例如汽车)设置动画时,但只需更改此处的骰子JLabel图标不需要暂停(除非您只想让它延迟一点)

但无论如何,要解决您的问题,您需要在JLabel或updateGraphics()上调用repaint()。设置JLabel的图标不会显示新图标,只需重新绘制它

当然,正如JB Nizet所说,要想让应用程序不挂起,你需要在一个新线程上调用repaint。我想你必须学会如何使用好线程,因为有时候会非常棘手。
祝你好运

diceImage是什么类型的?diceImage是JLabel为什么不制作一个BuffereImage然后将其放入diceImage?然后将BuffereImage更新为新的以使其更改映像?
private void rollDice() {

    Random r = new Random();
    int randomNumber = r.nextInt(6) + 1;

    diceImage.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Game/Images/Dice " + randomNumber + ".png")));

}
private void pause(int sleepTime) {
    try {
        Thread.sleep(sleepTime);
    } catch (InterruptedException e) {
        System.exit(-1);
    }
}