按照书上的方法,动画的for循环在创建框架的方法go()中:
public void go() {
//创建框架
Jframe jf = new Jframe();
jf.setBounds(0,0,1000,1000);
jf.setVisible(true);
jf.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
jf.setLayout(new BorderLayout());
//添加画笔
paint = new MyDraw();
jf.add(paint);
//动画循环
for(int a=0;a<500;a++) {
x1++;
y1++;
paint.repaint();
}
}
预期的效果:
尝试使用按钮来开启动画
把动画的for循环加到按钮的actionPerformed方法中后。
//创建按钮的监听方法
public void actionPerformed(ActionEvent event) {
for(int a=0;a<500;a++) {
x1++;
y1++;
paint.repaint();
try{
Thread.sleep(5);
} catch(Exception ex) {}
}
}
现象:在监听中循环执行repaint()只有最后一次repaint()显示到frame上。
监听方法执行结束后,只有最后一次repaint()被绘制。
产生问题的原因(推测)
注:本人水平有限,以下内容均为个人猜测。若发现错误,恳请指正!
同一时间只有栈顶的方法在运行。
运行程序时:main()方法调用go()方法
| go()//生成frame |
| main() |
按按钮时:调用监听方法
| ationPerformed()//执行动画的循环 |
| go()//此时包含frame的go()方法不在运行 |
| main() |
推测:frame的更新需要go()在栈顶。
go()不在栈顶时,frame不更新(推测)。故frame只会在ationPerformed()执行结束时绘制最后图像。
预期解决方案水平有限,解决方案未知。望各位前辈多多指点!
最后建议同学此书的朋友按照书上的正常操作完成章节学习(0.0)。不要学我乱搞。。。



