实现Runnable方法。
import java.awt.Component;public class BallRundable implements Runnable { private Ball ball; private Component component; public static final int STEPS = 1000; public static final int DELAY =3; public BallRundable(Ball ball, Component component) { this.ball = ball; this.component = component; } @Override public void run() { try { for (int i = 1; i <= STEPS; i++) { ball.move(component.getBounds()); component.repaint(); Thread.sleep(DELAY); } } catch (Exception e) { e.printStackTrace(); } }}import java.awt.EventQueue;import javax.swing.JFrame;public class BonuceThread { public static void main(String[] args) { EventQueue.invokeLater(new Runnable(){ @Override public void run() { JFrame frame = new BounceFrame(); frame.setTitle("BonuceThread"); frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); }}import java.awt.BorderLayout;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;public class BounceFrame extends JFrame { /** * */ private static final long serialVersionUID = -1202234496448237858L; private BallComponent comp; public BounceFrame() { this.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); } }); add(buttonPanel, BorderLayout.SOUTH); pack(); } public void addButton(Container c, String title, ActionListener listener) { JButton button = new JButton(title); c.add(button); button.addActionListener(listener); } public void addBall() { try { Ball ball = new Ball(); comp.add(ball); //多线程调用。 Runnable r = new BallRundable(ball, comp); Thread t = new Thread(r); t.start(); } catch (Exception e) { e.printStackTrace(); } }}新闻热点
疑难解答