我好奇按照网上的教程写了一段java线程动画,但是repaint()这个地方只能执行一次,
请问下高手这是怎么回事呢?从输出结果看,repaint()只运行了一次,但是
PaintThread却每隔40毫秒就执行一次,对照了好几遍,都没发现是哪错了,请高手指点下
package study;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import javax.management.timer.Timer;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextField;
public class swing extends JFrame {
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
swing frame = new swing();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public swing() {//布局
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
}
int x = 120;
int y = 120;
public void paint(Graphics g){//绘制线图
Image img = GameUtil.getImage("images/小车.jpg");
g.setColor(Color.BLUE);
g.fillRect (200, 0, 50, 300);
g.fillRect (0, 120, 450, 50);
g.drawImage(img, x, y,null);
new PaintThread().start();
x+=3;
y+=3;
System.out.println(1);
}
}
class PaintThread extends Thread{//PaintThread
int x = 120;
int y = 120;
public void run(){//run
swing paint = new swing();
while(true){//while
try {//try
paint.repaint();
System.out.println(2);
Thread.sleep(40);//40毫秒,相当于每秒25帧
} catch (InterruptedException e) {//catchtry
// TODO Auto-generated catch block
e.printStackTrace();
}//catch
}//while
}//run
}//PaintThread