我正在制作一个JApplet并且遇到动画问题。
这是我的代码:
this.sprite.setBounds(0,0,20,17);
this.sprite.setIcon(this.rangerDown);
for(int i = 0; i< 16;i++)
{
this.sprite.repaint();
this.sprite.setLocation(this.sprite.getX(), this.sprite.getY()+10);
try{
Thread.currentThread().sleep(100);
}catch(InterruptedException e){
}
}
有了这个,没有动画:在循环过程中没有任何反应,repaint()方法似乎只在精灵停止移动时才会动作。
我想只使用Swing,有关如何进行的任何想法吗?
感谢阅读。
答案 0 :(得分:4)
您应该使用javax.swing.Timer
来执行动画而不是线程睡眠。这是一个很好的链接,可以帮助您:http://java.sun.com/docs/books/tutorial/uiswing/misc/timer.html
此外,我强烈建议您购买本书Filthy Rich Clients - 如果您访问该网站,您还可以免费下载所有示例代码。例如,Chapter 12: Animation Fundamentals有一些很好的示例,例如演示Timer使用情况的MovingButton。
答案 1 :(得分:1)
你遗漏了代码周围的代码,这让你有点难以帮助你。
您很可能遇到线程处理问题。有一个Swing工作者线程负责显示你的东西;如果你在那个线程内睡觉,它就无法完成它的工作。如果您正在从该线程外部更改图像,那么它可能无法获取更改,因为您没有正确地与Swing线程同步。
你需要使用像SwingUtilities.invokeLater(Runnable r)之类的东西来实现这一点,你的图像改变代码将在r的run()方法中。如果你谷歌“invokeLater”和Swing,你很可能会找到例子。