GUI创建在某个函数时,当这个函数休眠时,那么GUI也会处于休眠状态
所以用
void change(){
for(int i=0;i<10000;i++){
frame.repaint();
for(Shape s:vs)
{dx=Math.random()*0.8;
dy=Math.random()*0.6;
alpha=Math.random()*0.36;
s.move(dx, dy);
s.rotate(alpha);
try {
Thread.sleep(5);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}}
这个所有的repaint都堆在一起 最后只重新绘制一次;
正确的解决方法应为:
public void change()
{
new Thread(new Runnable(){
public void run(){
dx=Math.random()*0.8;
dy=Math.random()*0.6;
alpha=Math.random()*0.36;
for(int i=0;i<1000;i++){
frame.repaint();
for(Shape s:vs)
{
s.move(dx, dy);
s.rotate(alpha);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}
}).start();
}
关于多线程的用法:http://blog.csdn.net/a718515028/article/details/17228181
本文探讨了在GUI应用程序中使用多线程进行更新的方法,避免GUI因长时间运算而冻结。通过实例展示了如何正确地使用多线程来实现GUI元素的平滑动画效果。
5168

被折叠的 条评论
为什么被折叠?



