class Theball extends Frame {
int height = 0;
int t = 0;
Theball() {
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
final Panel panel = new Panel() {
@Override
public void paint(Graphics g) {
super.paint(g);
t++;
g.drawOval(150, height, 10, 10);
}
};
panel.setSize(300, 300);
add(panel);
setSize(300, 300);
setVisible(true);
int delay = 25; //milliseconds
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
int size = panel.getSize().height-10;
height = t % size;
if ((t / size) % 2 != 0) {
height = size - height;
}
panel.repaint();
}
};
Timer timer = new Timer(delay, taskPerformer);
timer.setDelay(25);
timer.setRepeats(true);
timer.start();
}
public static void main(String args[]) {
Theball tb = new Theball();
}
}
最好别用线程,线程的启动不是严格准时的,我这里的定时器是个没有开启线程的定时器。效果比你的要好。
不是线程问题
而是闪屏问题——所以感觉上小球的速度不对。