1.繼承Thread
package org.pzhu.javase.se2;
import java.util.Random;
public class RectThread extends Thread {
ThreadPanel panel;
int speedy=0;
int speedx=0;
public RectThread(ThreadPanel panel) {
super();
this.panel = panel;
Random random=new Random();
speedx=random.nextInt()%4;
speedy=random.nextInt()%4;
speedx=speedx==0?1:speedx;
speedy=speedy==0?1:speedy;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
panel.rectx+=speedx;
panel.recty+=speedy;
if(panel.rectx<=0||panel.rectx+20>=panel.getWidth()){
speedx=-speedx;
}
if(panel.recty<=0||panel.recty+20>=panel.getHeight()){
speedy=-speedy;
}
panel.repaint();
try {
Thread.sleep(30);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
調用:RectThread rt=new RectThread();
rt.start();
2.實現Runnable接口
package org.pzhu.javase.se2;
import java.util.Random;
public class RectThreadRunnable implements Runnable {
ThreadPanel panel;
int speedy=0;
int speedx=0;
public RectThreadRunnable(ThreadPanel panel) {
//super();
this.panel = panel;
Random random=new Random();
speedx=random.nextInt()%4;
speedy=random.nextInt()%4;
speedx=speedx==0?1:speedx;
speedy=speedy==0?1:speedy;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
panel.rectx+=speedx;
panel.recty+=speedy;
if(panel.rectx<=0||panel.rectx+20>=panel.getWidth()){
speedx=-speedx;
}
if(panel.recty<=0||panel.recty+20>=panel.getHeight()){
speedy=-speedy;
}
panel.repaint();
try {
Thread.sleep(30);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
調用:
RectThreadRunnable runnable=new RectThreadRunnable(this);
Executor exec=new ScheduledThreadPoolExecutor(10);
exec.execute(runnable);
3.繼承TimerTask
package org.pzhu.javase.se2;
import java.util.Random;
import java.util.TimerTask;
public class RectTimerTask extends TimerTask {
ThreadPanel panel;
int speedy=0;
int speedx=0;
public RectTimerTask(ThreadPanel panel){
this.panel = panel;
Random random=new Random();
speedx=random.nextInt()%4;
speedy=random.nextInt()%4;
speedx=speedx==0?1:speedx;
speedy=speedy==0?1:speedy;
}
@Override
public void run() {
// TODO Auto-generated method stub
panel.rectx+=speedx;
panel.recty+=speedy;
if(panel.rectx<=0||panel.rectx+20>=panel.getWidth()){
speedx=-speedx;
}
if(panel.recty<=0||panel.recty+20>=panel.getHeight()){
speedy=-speedy;
}
panel.repaint();
}
}
調用:
RectTimerTask task=new RectTimerTask(this);
Timer timer=new Timer();
timer.schedule(task, 0, 30);