当前位置: 代码迷 >> J2SE >> coreJava上一个多线程的例子,该怎么处理
  详细解决方案

coreJava上一个多线程的例子,该怎么处理

热度:8   发布时间:2016-04-24 01:12:12.0
coreJava上一个多线程的例子
由于我没有学过swing所以书上的例子我不知道错在哪里~
我运行的结果是只弹出一个窗体 里面什么都没有
而书上说的效果图是有一个start的按钮和一个close按钮以及一个会动的小球
下面给出代码求大神帮忙看看
Java code
package com.coreJava.multithreading;import java.awt.BorderLayout;import java.awt.Container;import java.awt.EventQueue;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;public class Bounce {    public static void main(String[] args){        EventQueue.invokeLater(new Runnable() {                        @Override            public void run() {                JFrame frame=new BounceFrame();                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                frame.setVisible(true);            }        });    }    }class BounceFrame extends JFrame{        /**     *      */    private static final long serialVersionUID = 8985838171214084208L;    private BallComponent comp;    private static final int DEFAULT_WIDTH=450;    private static final int DEFAULT_HEIGHT=350;    private static final int STEPS=1000;    private static final int DELAY=3;        public BounceFrame(){        setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);        setTitle("Bounce");                comp=new BallComponent();        add(comp,BorderLayout.CENTER);        JPanel buttonPanel=new JPanel();        addButton(buttonPanel, "Start", new ActionListener() {                        @Override            public void actionPerformed(ActionEvent e) {                addBall();            }        });                addButton(buttonPanel, "Close", new ActionListener() {                        @Override            public void actionPerformed(ActionEvent e) {                System.exit(0);            }        });            }        public void addButton(Container c,String title,ActionListener listener){        JButton button=new JButton(title);        c.add(button);        button.addActionListener(listener);    }        public void addBall(){        Ball ball=new Ball();        comp.add(ball);        for (int i = 1; i <=STEPS; i++) {            ball.move(comp.getBounds());            comp.paint(comp.getGraphics());            try {                Thread.sleep(DELAY);            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }    }

Java code
package com.coreJava.multithreading;import java.awt.Graphics;import java.awt.Graphics2D;import java.util.ArrayList;import javax.swing.JPanel;public class BallComponent extends JPanel{    private ArrayList<Ball> balls=new ArrayList<Ball>();        public void add(Ball b){        balls.add(b);    }        public void paintComponent(Graphics g){        super.paintComponent(g);        Graphics2D g2=(Graphics2D)g;        for (Ball b : balls) {            g2.fill(b.getShape());        }    }    }

Java code
package com.coreJava.multithreading;import java.awt.geom.Ellipse2D;import java.awt.geom.Rectangle2D;public class Ball {    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;        public void move(Rectangle2D bounds){        x+=dx;        y+=dy;        if(x<bounds.getMinX()){            x=bounds.getMaxX();            dx=-dx;        }        if(x+XSIZE>=bounds.getMaxX()){            x=bounds.getMaxX()-XSIZE;            dx=-dx;        }        if(y<bounds.getMinY()){            y=bounds.getMinY();            dy=-dy;        }        if(y+YSIZE>=bounds.getMaxY()){            y=bounds.getMaxY()-YSIZE;            dy=-dy;        }    }        public Ellipse2D getShape(){        return new Ellipse2D.Double(x,y,XSIZE,YSIZE);    }    }