想使用java中的线程控制小球在格子中从左向右移动。但是线程的run()方法中却没有调用绘图方法repaint(),麻烦请问一下这个怎么解决?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.soft.Graphic.*;
public class TransportDemo extends Thread {
// 定义数组,一个数组元素对应一个格子
int a[] = new int[10];
// 设置变量,方便循环使用
int j = 0;
int jj = 0;
// 定义标志,用来控制格子中有几个点
int flag = 1;
// 实例化矩形和圆形类
Rectangles rect = new Rectangles();
Circle circle = new Circle();
// 定义窗口大小
private final int AREA_WIDTH = 340;
private final int AREA_HEIGHT = 240;
// 定义窗口
JFrame f = new JFrame("测试窗口");
// 定义画布大小
Grain gr = new Grain();
// 定义计时器
Timer timer;
Timer timer1;
public void init() {
gr.setPreferredSize(new Dimension(AREA_WIDTH, AREA_HEIGHT));
// 循环赋值个数组,1为占据,0为空
// for (int ii = 0; ii < flag; ii++) {
// a[ii] = 1;
// }
f.add(gr);
f.pack();
f.setVisible(true);
}
//线程方法,设置数组中的位置值为0或者1。
public void run (){
super.run();
System.out.println("已经进入进程");
while(true){
if(j==0){
a[0]=1;
j+=1;
}else if(j==a.length-1){
a[j]=0;
j=0;
}else{
a[j]=0;
a[j+1]=0;
j+=1;
}
gr.repaint();
}
}
// 图像呈现面板
class Grain extends Canvas {
@Override
public void paint(Graphics g) {
// 遍历数组,当数组的位置的值为1,则显示粒子
System.out.println("调用了repaint函数");
for (int i = 0; i < a.length; i++) {
if (a[i] == 1) {
g.setColor(Color.black);
g.fillOval(i * 20 + circle.getBallX(), circle.getBallY(),20, 20);
}
}
// 绘制网格
rect.paint(g);
}
}
public static void main(String[] args) {
new TransportDemo().init();
new TransportDemo().start();
}
}