Java多线程应用实例:制作烟花效果 本例知识点 一句话讲解 新学 使用Graphics类 绘制烟花 知识 使用Thread类 管理线程 已学 使用Math类 产生随机数 知识 使用Color类 设置颜色 —、 练习具体要求 本例制作烟花,运行效果如图941所示。执行本例实例后,用鼠标点击浏览器中的面 板,将出现五彩缤纷的烟花效果。本实例的知识点有:鼠标事件的监听,Graphics类和Thread 类的应用。 二、程序及注释 (1)编程思路:本例因为要模拟烟花效果,所以首先定义执行程序主线程的函数run(0 对一个烟花进行绘制。在函数runO中定义Graphics类的对象,通过程序中的算法来绘制 烟花。然后,因为要实现烟花的缤纷闪烁效果,所以要通过Thread类的 Thread.currentThread().sleep()方法使当前线程睡眠,让用户欣赏到当前的绘制效果。最 后,因为要实现人机交互.,所以首先要通过mousePressed(MouseEvent e)函数来实现对鼠 标事件的监听,这样当按下鼠标时,产生一个新线程就可以看到一个新的烟花效果。 (2)程序实现及注释: import java.awt.*; import java.applet.*; import java.awt.event.*; import javax.swing.*; public class Fireworks extends Applet implements MouseListener,Runnable int x,yi int top,point; /* *对小程序进行变量和颜色的初始化
Java 多线程应用实例: 制作烟花效果 本例知识点 一句话讲解 新学 知识 使用 Graphics 类 绘制烟花 使用 Thread 类 管理线程 已学 知识 使用 Math 类 产生随机数 使用 Color 类 设置颜色 一、练习具体要求 本例制作烟花,运行效果如图 94-1 所示。执行本例实例后,用鼠标点击浏览器中的面 板,将出现五彩缤纷的烟花效果。本实例的知识点有:鼠标事件的监听,Graphics 类和 Thread 类的应用。 二、程序及注释 (1)编程思路:本例因为要模拟烟花效果,所以首先定义执行程序主线程的函数 run() 对一个烟花进行绘制。在函数 run()中定义 Graphics 类的对象,通过程序中的算法来绘制 烟 花 。 然 后 , 因 为 要 实 现 烟 花 的 缤 纷 闪 烁 效 果 , 所 以 要 通 过 Thread 类 的 Thread.currentThread().sleep()方法使当前线程睡眠,让用户欣赏到当前的绘制效果。最 后,因为要实现人机交互.,所以首先要通过 mousePressed(MouseEvent e)函数来实现对鼠 标事件的监听,这样当按下鼠标时,产生一个新线程就可以看到一个新的烟花效果。 (2) 程序实现及注释: import java.awt.*; import java.applet.*; import java.awt.event.*; import javax.swing.*; public class Fireworks extends Applet implements MouseListener,Runnable { int x,y; int top,point; /** *对小程序进行变量和颜色的初始化。 */
public void init() ×=0 y=0; /设置背景色为黑色 setBackground(Color.black); addMouseListener(this); public void paint(Graphics g) /女* *使该程序可以作为应用程序运行。 * public static void main(String args[]){ Fireworks applet new Fireworks(); JFrame frame new JFrame("TextAreaNew"); frame.addwindowListener(new WindowAdapter(){ public void windowclosing(WindowEvent e){ System.exit(0); }): frame.getContentPane().add( applet,BorderLayout.CENTER); frame.setsize(800,400); applet.init () applet.start();
public void init() { x = 0; y = 0; //设置背景色为黑色 setBackground(Color.black); addMouseListener(this); } public void paint(Graphics g) { } /** *使该程序可以作为应用程序运行。 */ public static void main(String args[]) { Fireworks applet = new Fireworks(); JFrame frame = new JFrame("TextAreaNew"); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); } }); frame.getContentPane().add( applet, BorderLayout.CENTER); frame.setSize(800,400); applet.init(); applet.start();
frame.setvisible(true); /* *程序主线程,对一个烟花进行绘制。 */ public void run() { //变量初始化 Graphics gl; gl getGraphics(); int y move,y click,x click; int vi x_click x; y click yi y move 400; v=3; int r,g,b; while(y_move y_click) g1.setColor(Color.black); g1.filloval(x_click,y_move,5,5); y move -=5; r =(((int)Math.round (Math.random()*4321))8200)+55; g (((int)Math.round(Math.random()*4321))8200)+55; b=(((int)Math.round(Math.random()*4321))号200)+55; g1.setColor(new Color(r,g,b)); g1.filloval(x click,y move,5,5); for(int j=0 ;j<=10;j++)
frame.setVisible(true); } /** *程序主线程,对一个烟花进行绘制。 */ public void run() { //变量初始化 Graphics g1; g1 = getGraphics(); int y_move,y_click,x_click; int v; x_click = x; y_click = y; y_move = 400; v = 3; int r,g,b; while(y_move > y_click) { g1.setColor(Color.black); g1.fillOval(x_click,y_move,5,5); y_move -= 5; r = (((int)Math.round(Math.random()*4321))%200)+55; g = (((int)Math.round(Math.random()*4321))%200)+55; b = (((int)Math.round(Math.random()*4321))%200)+55; g1.setColor(new Color(r,g,b)); g1.fillOval(x_click,y_move,5,5); for(int j = 0 ;j<=10;j++)
{ if(r>55)x-=20: if(g>55)g-=20; 1f(b>55)b-=20: g1.setColor(new Color(r,g,b)); g1.fillOval(x click,y move+j*5,5,5); g1.setColor(Color.black); g1.fillOval(x click,y move+5*10,5,5); try Thread.currentThread().sleep(v++); catch (InterruptedException e){) for(int j=12;j>=0;j--) g1.setColor(Color.black); g1.filloval(x_click,y_move+(j*5),5,5); try Thread.currentThread().sleep((v++)/3); catch (InterruptedException e){) y move =400; g1.setColor(Color.black); while(y_move y_click)
{ if(r>55) r -= 20; if(g>55) g -= 20; if(b>55) b -=20; g1.setColor(new Color(r,g,b)); g1.fillOval(x_click,y_move+j*5,5,5); } g1.setColor(Color.black); g1.fillOval(x_click,y_move+5*10,5,5); try { Thread.currentThread().sleep(v++); } catch (InterruptedException e) {} } for(int j=12;j>=0;j--) { g1.setColor(Color.black); g1.fillOval(x_click,y_move+(j*5),5,5); try { Thread.currentThread().sleep((v++)/3); } catch (InterruptedException e) {} } y_move = 400; g1.setColor(Color.black); while(y_move > y_click) {
g1.filloval(x_click-2,y_move,9,5); y_move -=5; v=15: for(int i=0;i<=25;i++) r (((int)Math.round(Math.random()*4321))8200)+55; g =(((int)Math.round (Math.random()*4321))8200)+55; b (((int)Math.round (Math.random()*4321))$200)+55; g1.setColor(new Color(r,g,b)); gl.drawoval(x_click-3*i,y_click-3*i,6*i,6*i); if(i<23) g1.drawOva1(x_c1ick-3*(i+1),y_c1ick-3*(i+1),6*(i+1),6*(i+1); g1.draw0va1(x_c1ick-3*(i+2),y_click-3*(i+2),6*(i+2),6*(i+2)): try Thread.currentThread().sleep(v++); catch (InterruptedException e)() g1.setColor(Color.black); gl.drawOval(x click-3*i,y click-3*i,6*i,6*i);
g1.fillOval(x_click-2,y_move,9,5); y_move -= 5; } v = 15; for(int i=0;i<=25;i++) { r = (((int)Math.round(Math.random()*4321))%200)+55; g = (((int)Math.round(Math.random()*4321))%200)+55; b = (((int)Math.round(Math.random()*4321))%200)+55; g1.setColor(new Color(r,g,b)); g1.drawOval(x_click-3*i,y_click-3*i,6*i,6*i); if(i<23) { g1.drawOval(x_click-3*(i+1),y_click-3*(i+1),6*(i+1),6*(i+1)); g1.drawOval(x_click-3*(i+2),y_click-3*(i+2),6*(i+2),6*(i+2)); } try { Thread.currentThread().sleep(v++); } catch (InterruptedException e) {} g1.setColor(Color.black); g1.drawOval(x_click-3*i,y_click-3*i,6*i,6*i); } }
/★* *对鼠标事件进行监听。 *临听其鼠标按下事件。 +当按下鼠标时,产生一个新线程。 */ public void mousePressed(MouseEvent e) x e.getx(); y =e.getY(); Thread one; one new Thread(this); one.start(); one null; /*★ *实现MouseListener接中的方法。为一个空方法。 */ public void mouseReleased(MouseEvent e) /** *实现MouseListener接中的方法。为一个空方法。 */ public void mouseEntered(MouseEvent e) /** *实现MouseListener接中的方法。为一个空方法
/** *对鼠标事件进行监听。 *临听其鼠标按下事件。 *当按下鼠标时,产生一个新线程。 */ public void mousePressed(MouseEvent e) { x = e.getX(); y = e.getY(); Thread one; one = new Thread(this); one.start(); one = null; } /** *实现 MouseListener 接中的方法。为一个空方法。 */ public void mouseReleased(MouseEvent e) { } /** *实现 MouseListener 接中的方法。为一个空方法。 */ public void mouseEntered(MouseEvent e) { } /** *实现 MouseListener 接中的方法。为一个空方法。 */
public void mouseExited(MouseEvent e) /** *实现MouseListener接中的方法。为一个空方法。 */ public void mouseclicked(MouseEvent e) 三、练习效果(如图94-1所示) 本实例代码编写完毕,存盘为:C:j2sdkl.4.O\javaprograms\Fireworks.java。 打开计算机的命令提示符窗口,然后在命令提示符窗口中,定位到javaprograms目录,输 入javac Fireworks.java来编译程序,最后将程序加载到网页上。在javaprograms文件 夹下新建一个记事本文件,内容为 KBODY> ,然后保存为Fireworks.html的网页文件。 本例制作完毕,用浏览器打开Fireworks.html文件便可以看到制作效果。 图94-1练习效果 四、总结提高 通过制作烟花的实例,运用了Java2中的界面技术和线程技术。通过界面技术,制作出
public void mouseExited(MouseEvent e) { } /** *实现 MouseListener 接中的方法。为一个空方法。 */ public void mouseClicked(MouseEvent e) { } } 三、练习效果(如图 94-1 所示) 本实例代码编写完毕,存盘为:C: j2sdk1.4.0\javaprograms\ Fireworks.java。 打开计算机的命令提示符窗口,然后在命令提示符窗口中,定位到 javaprograms 目录,输 入 javac Fireworks.java 来编译程序,最后将程序加载到网页上。在 javaprograms 文件 夹下新建一个记事本文件,内容为 ,然后保存为 Fireworks.html 的网页文件。 本例制作完毕,用浏览器打开 Fireworks.html 文件便可以看到制作效果。 图 94-1 练习效果 四、总结提高 通过制作烟花的实例,运用了 Java2 中的界面技术和线程技术。通过界面技术,制作出
烟花的形状。通过线程技术,控制烟花的播放场景和播放时间。 疯狂java简介 疯狂Java是广州为学教育科技有限公司(原广州捷途教育科技有限公司)旗下品牌, 由李刚老师、肖文吉老师联合创建,作为一家专注于javaEE和3G/4G技术的专业培训服务 机构,疯狂Java怀抱“软件强国”的理想,立志以务实的技术来改变中国的软件教育。以 “十年磨一剑”的心态打造全中国最强的Java学习体系。 疯狂java培训讲义 疯狂Java相继出版《疯狂Java讲义》、《疯狂Android讲义》、《轻量级JavaEE企业应用 实战》、《疯狂Ajax讲义》、《疯狂XML讲义》、《经典JavaEE企业应用实战》、《Struts.2.1 权威指南》、《RubyOnRails敏捷开发最佳实践》、《疯狂Java突破程序员基本功的l6课》、《疯 狂JAVA成为程设高手的l6堂课》等著作。其中疯狂Java体系图书都是已经得到广泛的市 场认同,并多次重印的畅销图书,并被多家高校选作教材,部分图书已被翻译成繁体中文版、 输出到台湾地区。 疯狂java发展概况 疯狂Java紧扣IT前沿技术的脉搏,高瞻远瞩立于潮头,引领行业标杆,开创T教育 培训的新天地,被称为新式T教育的“黄埔军校”。疯狂java教育中心主要面对大学生和 准大学生的长期就业培训、企业员工定制内训、在职工程师的短期高端培训以及企业级应用 的产品研发,其专业服务和质量承诺在客户中赢得广泛的声誉。为保服务的质量,学校与华 南理工大学、中山大学、暨南大学、华南师范大学等高等学府建立了师资力量方面的合作关 系,同时与中国电信、中国移动、中国邮政、新华南方、汇丰银行等知名企业建立了广泛的 战略合作伙伴关系。 疯狂java师资力量 疯狂Java创始人李刚,携疯狂Java精英讲师团队肖文吉、李韩飞、黄勇、陈辉等老师 将带给广大学习者“非一般”的疯狂。 疯狂java培训特色 疯狂Java结合自身特色,打破固有思维模式,以突出实战性,系统性,学识转换相结 合的理念体系指引下,注重如何将培训内容真正转化为实操经验,以此促进工作能力的达成。 在疯狂软件学院,学员通过参与企业实际项目开发,学以致用,获得实际项目经验。凭借自 身强悍的师资、一流的课程、真实的项目、超高的就业率己经让广大南方学子成功走上软件 工程师职业道路。大量毕业即失业的学子已通过疯狂Java实现了就业。加入疯狂Java,加 入改变世界的力量,让我们一起行动,用自己的代码改变世界! 地址:广州市天河区车陂大岗路4号沣宏大厦3011(车陂地铁D出口(或者BRT车陂站) 过马路左转前行200米) 联系电话:020-28309358、28309378java技术问题咨询QQ:951170790
烟花的形状。通过线程技术,控制烟花的播放场景和播放时间。 疯狂 java 简介 疯狂 Java 是广州为学教育科技有限公司(原广州捷途教育科技有限公司)旗下品牌, 由李刚老师、肖文吉老师联合创建,作为一家专注于 javaEE 和 3G/4G 技术的专业培训服务 机构,疯狂 Java 怀抱“软件强国”的理想,立志以务实的技术来改变中国的软件教育。以 “十年磨一剑”的心态打造全中国最强的 Java 学习体系。 疯狂 java 培训讲义 疯狂 Java 相继出版《疯狂 Java 讲义》、《疯狂 Android 讲义》、《轻量级 JavaEE 企业应用 实战》、《疯狂 Ajax 讲义》、《疯狂 XML 讲义》、《经典 JavaEE 企业应用实战》、《Struts2.1 权威指南》、《RubyOnRails 敏捷开发最佳实践》、《疯狂 Java 突破程序员基本功的 16 课》、《疯 狂 JAVA 成为程设高手的 16 堂课》等著作。其中疯狂 Java 体系图书都是已经得到广泛的市 场认同,并多次重印的畅销图书,并被多家高校选作教材,部分图书已被翻译成繁体中文版、 输出到台湾地区。 疯狂 java 发展概况 疯狂 Java 紧扣 IT 前沿技术的脉搏,高瞻远瞩立于潮头,引领行业标杆,开创 IT 教育 培训的新天地,被称为新式 IT 教育的“黄埔军校”。疯狂 java 教育中心主要面对大学生和 准大学生的长期就业培训、企业员工定制内训、在职工程师的短期高端培训以及企业级应用 的产品研发,其专业服务和质量承诺在客户中赢得广泛的声誉。为保服务的质量,学校与华 南理工大学、中山大学、暨南大学、华南师范大学等高等学府建立了师资力量方面的合作关 系,同时与中国电信、中国移动、中国邮政、新华南方、汇丰银行等知名企业建立了广泛的 战略合作伙伴关系。 疯狂 java 师资力量 疯狂 Java 创始人李刚,携疯狂 Java 精英讲师团队肖文吉、李韩飞、黄勇、陈辉等老师 将带给广大学习者“非一般”的疯狂。 疯狂 java 培训特色 疯狂 Java 结合自身特色,打破固有思维模式,以突出实战性,系统性,学识转换相结 合的理念体系指引下,注重如何将培训内容真正转化为实操经验,以此促进工作能力的达成。 在疯狂软件学院,学员通过参与企业实际项目开发,学以致用,获得实际项目经验。凭借自 身强悍的师资、一流的课程、真实的项目、超高的就业率已经让广大南方学子成功走上软件 工程师职业道路。大量毕业即失业的学子已通过疯狂 Java 实现了就业。加入疯狂 Java,加 入改变世界的力量,让我们一起行动,用自己的代码改变世界! 地址:广州市天河区车陂大岗路 4 号沣宏大厦 3011(车陂地铁 D 出口(或者 BRT 车陂站) 过马路左转前行 200 米) 联系电话: 020-28309358、28309378 java 技术问题咨询 QQ:951170790