[求助]自己编的一个JAVA小程序,出现BUG不知道是什么问题.
问题描述: 程序的主要目的是在一个Frame上面画四个小车,通过四个输出窗口输入速度,点start开始跑动,现在的问题是在输入了速度以后多次点击START后小车的速度会不断加快(按观察得是加倍的).初度判断是触发器的问题,但是由于ECLIPSE的DEBUG不会用...导致无法找到问题的根本原因所在.所以求教各位...
在线等解答,谢谢了.
代码:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.*;
import javax.swing.*;
public class CarMain {
public static void main(String[] args){
JFrame frame=new CarFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class CarFrame extends JFrame{
public CarFrame(){
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
setTitle("CarFrame");
JPanel Timepanel=new JPanel();
Timepanel.add(new JLabel("Car1:"));
Rate1Field= new JTextField("0",5);
Timepanel.add(Rate1Field);
Timepanel.add(new JLabel("Car2:"));
Rate2Field= new JTextField("0",5);
Timepanel.add(Rate2Field);
Timepanel.add(new JLabel("Car3:"));
Rate3Field= new JTextField("0",5);
Timepanel.add(Rate3Field);
Timepanel.add(new JLabel("Car4:"));
Rate4Field= new JTextField("0",5);
Timepanel.add(Rate4Field);
panel= new CarPanel();
panel.CarlistInitialisation();
add(panel,BorderLayout.CENTER);
addButton(Timepanel,"Start",
new ActionListener()
{
public void actionPerformed(ActionEvent event){
setRateto();
for(int n=0;n<4;n++){
panel.setRatetoCar(CarRate[n], n);
Runnable r=new CarRunnable(panel.getCar(n),panel);
Thread t=new Thread(r);
t.start();
}
}
});
addButton(Timepanel,"Close",new ActionListener(){
public void actionPerformed(ActionEvent event){
System.exit(0);
}
});
add(Timepanel,BorderLayout.NORTH);
}
public void setRateto(){
try{
CarRate[0]=Integer.parseInt(Rate1Field.getText().trim());
CarRate[1]=Integer.parseInt(Rate2Field.getText().trim());
CarRate[2]=Integer.parseInt(Rate3Field.getText().trim());
CarRate[3]=Integer.parseInt(Rate4Field.getText().trim());
}catch(NumberFormatException e){}
}
public void addButton(Container c,String title,ActionListener listener){
JButton button= new JButton(title);
c.add(button);
button.addActionListener(listener);
}
private CarPanel panel;
private JTextField Rate1Field,Rate2Field,Rate3Field,Rate4Field;
private int CarRate[]={0,0,0,0},mark=0,count=0;
public static final int DEFAULT_WIDTH=600;
public static final int DEFAULT_HEIGHT=400;
public static final int STEPS=1000;
public static final int DELAY=3;
}
class CarPanel extends JPanel{
private Car[] Carlist=new Car[4];
public void add(Car car,int n){
Carlist[n]=car;
}
public void setRatetoCar(double rate,int n){
Carlist[n].setRate(rate);
}
public void CarlistInitialisation(){
Carlist[0]= new Car(0,0);
Carlist[1]= new Car(0,90);
Carlist[2]= new Car(0,180);
Carlist[3]= new Car(0,270);
}
public void paintComponent(Graphics g){
int i=0,n=0;
super.paintComponent(g);
Graphics2D g2=(Graphics2D) g;
for(i=0;i<4;i++){
g2.fill(Carlist[i].getShape());
}
}
public Car getCar(int n){
return Carlist[n];
}
}
class Car{
public Car(int n,int y){
dx=n;
this.y=y;
}
public void move(Rectangle2D bounds){
x+=dx;
if(y<400){
if(x<bounds.getMinX()){
x=bounds.getCenterX();
}
if(x+XSIZE>=600)
x=bounds.getMinX();}
else{x=0;y=0;}
}
public Ellipse2D getShape(){
return new Ellipse2D.Double(x,y,XSIZE,YSIZE);
}
public Ellipse2D getShape(int Y){
return new Ellipse2D.Double(x,Y,XSIZE,YSIZE);
}
public void setRate(double rate){
dx=rate;
}
public double getRate(){
return dx;
}
private static final int XSIZE =15;
private static final int YSIZE =15;
private double x=0;
private double y=0;
private double dx=1;
private double dy=1;
}
class CarRunnable implements Runnable{
private Car car;
private Component component;
public static final int DELAY=20;
public CarRunnable(Car aCar,Component aComponent){
car=aCar;
component=aComponent;}
public void run(){
try{
while(true)
{
car.move(component.getBounds());
component.repaint();
Thread.sleep(DELAY);
}
}catch(InterruptedException e){
}
}
}
import java.awt.event.*;
import java.awt.geom.*;
import java.util.*;
import javax.swing.*;
public class CarMain {
public static void main(String[] args){
JFrame frame=new CarFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class CarFrame extends JFrame{
public CarFrame(){
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
setTitle("CarFrame");
JPanel Timepanel=new JPanel();
Timepanel.add(new JLabel("Car1:"));
Rate1Field= new JTextField("0",5);
Timepanel.add(Rate1Field);
Timepanel.add(new JLabel("Car2:"));
Rate2Field= new JTextField("0",5);
Timepanel.add(Rate2Field);
Timepanel.add(new JLabel("Car3:"));
Rate3Field= new JTextField("0",5);
Timepanel.add(Rate3Field);
Timepanel.add(new JLabel("Car4:"));
Rate4Field= new JTextField("0",5);
Timepanel.add(Rate4Field);
panel= new CarPanel();
panel.CarlistInitialisation();
add(panel,BorderLayout.CENTER);
addButton(Timepanel,"Start",
new ActionListener()
{
public void actionPerformed(ActionEvent event){
setRateto();
for(int n=0;n<4;n++){
panel.setRatetoCar(CarRate[n], n);
Runnable r=new CarRunnable(panel.getCar(n),panel);
Thread t=new Thread(r);
t.start();
}
}
});
addButton(Timepanel,"Close",new ActionListener(){
public void actionPerformed(ActionEvent event){
System.exit(0);
}
});
add(Timepanel,BorderLayout.NORTH);
}
public void setRateto(){
try{
CarRate[0]=Integer.parseInt(Rate1Field.getText().trim());
CarRate[1]=Integer.parseInt(Rate2Field.getText().trim());
CarRate[2]=Integer.parseInt(Rate3Field.getText().trim());
CarRate[3]=Integer.parseInt(Rate4Field.getText().trim());
}catch(NumberFormatException e){}
}
public void addButton(Container c,String title,ActionListener listener){
JButton button= new JButton(title);
c.add(button);
button.addActionListener(listener);
}
private CarPanel panel;
private JTextField Rate1Field,Rate2Field,Rate3Field,Rate4Field;
private int CarRate[]={0,0,0,0},mark=0,count=0;
public static final int DEFAULT_WIDTH=600;
public static final int DEFAULT_HEIGHT=400;
public static final int STEPS=1000;
public static final int DELAY=3;
}
class CarPanel extends JPanel{
private Car[] Carlist=new Car[4];
public void add(Car car,int n){
Carlist[n]=car;
}
public void setRatetoCar(double rate,int n){
Carlist[n].setRate(rate);
}
public void CarlistInitialisation(){
Carlist[0]= new Car(0,0);
Carlist[1]= new Car(0,90);
Carlist[2]= new Car(0,180);
Carlist[3]= new Car(0,270);
}
public void paintComponent(Graphics g){
int i=0,n=0;
super.paintComponent(g);
Graphics2D g2=(Graphics2D) g;
for(i=0;i<4;i++){
g2.fill(Carlist[i].getShape());
}
}
public Car getCar(int n){
return Carlist[n];
}
}
class Car{
public Car(int n,int y){
dx=n;
this.y=y;
}
public void move(Rectangle2D bounds){
x+=dx;
if(y<400){
if(x<bounds.getMinX()){
x=bounds.getCenterX();
}
if(x+XSIZE>=600)
x=bounds.getMinX();}
else{x=0;y=0;}
}
public Ellipse2D getShape(){
return new Ellipse2D.Double(x,y,XSIZE,YSIZE);
}
public Ellipse2D getShape(int Y){
return new Ellipse2D.Double(x,Y,XSIZE,YSIZE);
}
public void setRate(double rate){
dx=rate;
}
public double getRate(){
return dx;
}
private static final int XSIZE =15;
private static final int YSIZE =15;
private double x=0;
private double y=0;
private double dx=1;
private double dy=1;
}
class CarRunnable implements Runnable{
private Car car;
private Component component;
public static final int DELAY=20;
public CarRunnable(Car aCar,Component aComponent){
car=aCar;
component=aComponent;}
public void run(){
try{
while(true)
{
car.move(component.getBounds());
component.repaint();
Thread.sleep(DELAY);
}
}catch(InterruptedException e){
}
}
}
Everythins is new.
偶然发现了这么一个恰好契合我最近BLOG动机的博客地址的存在.
清新的面板和博客站内容,很喜欢.
以后就定居在这里了,SOHU的BLOG可能会废弃掉.
暂时就这样了,恩.