博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个很好的Java多线程的例子
阅读量:6566 次
发布时间:2019-06-24

本文共 3524 字,大约阅读时间需要 11 分钟。

hot3.png

package acm;//Bounce.javaimport java.awt.BorderLayout;import java.awt.Component;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()		{			public void run()			{				JFrame frame = new BounceFrame();				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);				frame.setVisible(true);			}		}		);	}}class BounceFrame extends JFrame{	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()			{				public void actionPerformed(ActionEvent event)				{					addBall();				}			}			);				addButton(buttonPanel, "Close", new ActionListener()			{				public void actionPerformed(ActionEvent event)				{					System.exit(0);				}			}			);				add(buttonPanel, BorderLayout.SOUTH);	}		public void addButton(Container c, String title, ActionListener listener)	{		JButton button = new JButton(title);		c.add(button);		button.addActionListener(listener);	}		public void addBall()	{			Ball b = new Ball();		comp.add(b);		Runnable r = new BallRunnable(b, comp);		Thread t = new Thread(r);		t.start();		/*		try		{			Ball ball = new Ball();			comp.add(ball);						for(int i=1; i<=STEPS; i++)			{				ball.move(comp.getBounds());				comp.paint(comp.getGraphics());				Thread.sleep(DELAY);			}		}		catch(Exception e)		{}		*/	}		private BallComponent comp;	public static final int DEFAULT_WIDTH = 450;	public static final int DEFAULT_HEIGHT = 350;	public static final int STEPS = 1000;	public static final int DELAY = 3;}class BallRunnable implements Runnable{	public BallRunnable(Ball aBall, Component aComponent)	{		ball = aBall;		component = aComponent;	}		public void run()	{		try		{			for(int i=1; i<=STEPS; i++)			{				ball.move(component.getBounds());				component.repaint();				Thread.sleep(DELAY);			}		}		catch(Exception e)		{}	}			private Ball ball;	private Component component;		public static final int DEFAULT_WIDTH = 450;	public static final int DEFAULT_HEIGHT = 350;	public static final int STEPS = 1000*100;	public static final int DELAY = 5;}

package acm;//Ball.javaimport java.awt.geom.Ellipse2D;import java.awt.geom.Rectangle2D;/* * A ball that moves and bounces off the edges of a rectangle * */public class Ball {	public void move(Rectangle2D bounds)	{		x += dx;		y += dy;		if(x
= bounds.getMaxX()) { x = bounds.getMaxX() - XSIZE; dx = -dx; } if(y
= bounds.getMaxY()) { y = bounds.getMaxY() - YSIZE; dy = -dy; } } public Ellipse2D getShape() { return new Ellipse2D.Double(x, y, XSIZE, YSIZE); } 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;}

package acm;//BallComponent.javaimport java.awt.Graphics;import java.awt.Graphics2D;import java.util.ArrayList;import javax.swing.JPanel;public class BallComponent extends JPanel{		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());		}	}		private ArrayList
 balls = new ArrayList
();}

转载于:https://my.oschina.net/u/923087/blog/263629

你可能感兴趣的文章
【JavaScript吉光片羽】遭遇IE8
查看>>
HTTP请求响应码
查看>>
http://www.fx114.net/qa-24-116329.aspx
查看>>
法总统:英国若“无协议脱欧” 将成最大输家
查看>>
阿里巴巴宣布开源限流降级中间件——Sentinel
查看>>
以OpenGL/ES视角介绍gfx-hal(Vulkan) Framebuffer接口使用
查看>>
我为什么选择使用容器?
查看>>
如何提高 Xcode 的编译速度
查看>>
杂篇-从整理文件发起的杂谈[-File-]
查看>>
【临实战】使用 Python 处理 Nginx 日志
查看>>
Python中最好用的命令行参数解析工具
查看>>
LeetCode14.最长公共前缀 JavaScript
查看>>
"Hotpatch"潜在的安全风险
查看>>
下载文件的15种方法
查看>>
CSS
查看>>
Netty源码解析1-Buffer
查看>>
动态网站的爬取
查看>>
小知识一、让Swift继续用OC#warning效果
查看>>
源码阅读:AFNetworking(八)——AFAutoPurgingImageCache
查看>>
数据库的基础知识
查看>>