收藏 分享(赏)

Java语言程序设计基础教程课件(第11章).ppt

上传人:hskm5268 文档编号:8115676 上传时间:2019-06-09 格式:PPT 页数:51 大小:151KB
下载 相关 举报
Java语言程序设计基础教程课件(第11章).ppt_第1页
第1页 / 共51页
Java语言程序设计基础教程课件(第11章).ppt_第2页
第2页 / 共51页
Java语言程序设计基础教程课件(第11章).ppt_第3页
第3页 / 共51页
Java语言程序设计基础教程课件(第11章).ppt_第4页
第4页 / 共51页
Java语言程序设计基础教程课件(第11章).ppt_第5页
第5页 / 共51页
点击查看更多>>
资源描述

1、第11章 Java Applet基础,Java Applet的运行原理 Applet类及其常用方法 一个显示动画的Applet程序 Applet中使用URL Applet中建立新线程 Applet中播放声音,11.1 Java Applet的运行原理,一个Java Applet程序中必须有一个类是Applet类的子类。称该子类是Java Applet的主类,并且主类必须修饰为public。 Java Applet程序是通过浏览器来执行的,因此,它和Java应用程序有许多不同之处。,11.1.1 Applet的运行环境,一个Java应用程序经过编译成.class后,可直接通过Java解释器来执行

2、。一个Java Applet在执行时也是先被编译成为.class文件,但必须再将字节码文件嵌入到Web页面中,通过浏览器或使用JDK中的appletviewer命令来运行。 下面通过例子来说明一个Java Applet的运行原理。,【例11-1】 一个名为HelloEducation.java的Applet类,在浏览器的坐标(25,25)位置显示字符串。,package chapter11; import java.applet.Applet;/Applet类是所有的Java applet的父类; import java.awt.Graphics;/在进行显示输出时,需要用到类Graphics

3、的对象; public class HelloEducation extends Applet / 程序员给这个类取名为HelloEducation/ 所有的applet程序都是Applet类的子类public String s;public void init() s = new String(“Welcome to Tongfang Education“);/ 生成一个字符串对象public void paint(Graphics g) g.drawString(s, 25, 25); / 在浏览器中坐标为(25,25)的位置显示字符串s ,Applet应用程序必须嵌入在HTML页面中,才

4、能得到解释执行; Applet可以从Web页面中获得参数,并和Web页面进行交互。 含有Applet的网页的HTML文件代码中必须带有applet和/applet这样一对标记,当支持Java的网络浏览器遇到这对标记时,就将下载相应的小程序代码并在本地计算机上执行该Applet小程序。,Applet是一种Java的小程序,它通过使用该Applet的HTML文件,由支持Java的网页浏览器下载运行。也可以通过java开发工具的appletviewer来运行。Applet 程序离不开使用它的HTML文件。这个HTML文件中关于Applet的信息至少应包含以下三点: 字节码文件名(编译后的Java文件

5、,以.class为后缀); 字节码文件的地址; 在网页上显示Applet的方式。 一个HTML文件增加Applet有关的内容只是使网页更加富有生气,如添加声音、动画等这些吸引人的特征,它并不会改变HTML文件中与Applet无关的元素。,11.1.2 什么是appletviewer,appletviewer是JDK下的一个Applet查看工具,在Java安装目录下的bin文件夹中可以找到这个可执行文件。 appletviewer带有一个命令行参数形式的URL,它指向一个含有Applet引用的HTML文件。这个Applet引用是一个指定了appletviewer要装载代码的HTML标记:,11.

6、1.3 Java Applet程序开发步骤,Applet程序开发主要步骤如下: 选用EDIT或Windows Notepad等工具作为编辑器建立Java Applet源程序。 把Applet的源程序转换为字节码文件。 编制使用class 的HTML文件。在HTML文件内放入必要的APPLET语句。 下面举一个最简单的HelloWorld 例子11-2来说明Applet程序的开发过程:,1编辑Applet 的java源文件,创建文件夹C:ghq,在该文件夹下建立 HelloWorld.java 【例11-2】 import java.applet.Applet; import java.awt.

7、*; public class HelloWorld extends Applet / 继承Appelet类,这是Appelet Java程序的特点 public void paint(Graphics g) g.drawString(“Hello World!“, 5, 35); 保存上述程序在C:java_work11HelloWorld.java文件里。,2编译Applet,编译HelloWorld.java源文件可使用如下JDK命令:注意:如果编写的源程序违反了Java编程语言的语法规则,Java编译器将在屏幕上显示语法错误提示信息。源文件中必须不含任何语法错误,Java编译器才能成功

8、地把源程序转换为appletviewer和浏览器能够执行的字节码程序。 成功地编译Java applet之后生成响应的字节码文件HelloWorld.class的文件。用资源管理器或DIR命令列出目录列表,将会发现目录C:ghq中多了一个名为HelloWorld.class的文件。,3创建HTML文件,在运行创建的HelloWorld.class 之前,还需创建一个HTML文件,appletviewer或浏览器将通过该文件访问创建的Applet。为运行HelloWorld.class, 需要创建包含如下HTML语句的名为HelloWorld.html的文件。,【例11-3】 My applet

9、 HelloWorld starting page,4执行HelloWorld.html,如果用appletviewer运行HelloWorld.html,需输入如下的命令行:如下图所示,可以看出,该命令启动了appletviewer并指明了html文件,该html文件中包含对应于HelloWorld的applet语句。,11.1.4 Applet的安全机制,浏览一个包含Applet的网页时,实际上是从远程服务器上下载到用户本地机上运行的,所以安全问题显得十分重要。Applet本身设定了相应的安全规则来保证用户的系统安全,这些规则包括: Applet永远无法运行本地机上的可执行程序。 Appl

10、et除了与所在的服务器联系外,无法再同任何其他的服务器取得联系。 Applet不能对本地文件系统进行读写操作。 除了本地机上使用的Java版本号、操作系统名称和版本、系统使用的特殊字符外,Applet不能获取其他有关本地计算机的信息。特别是本地系统的用户名以及Email等信息。 Applet的弹出式窗口都会带有一个警告信息。,由于Applet是在Java虚拟机中解释执行,而不是由用户计算机的CPU直接运行,才使得这些安全规则成为可能。因为解释器会检查所有的关键指令和程序运行范围,能够防止恶意编写的Applet导致计算机崩溃、重写系统内存或改变系统权限。 在某些情况下,通过使用签名的Applet

11、还可以针对不同的情况给予其不同级别的安全等级。被签名的Applet携带一个可以证明其签名者身份的证书,加密技术能够保证这种证书不能被伪造,如果用户信任签名者,就可以赋给Applet额外的权限。,11.2 Applet类及其方法,Applet类是所有Applet应用的基类,所有的Java小应用程序都必须继承该类。如下所示。 import java. applet.*; public class OurApplet extends Applet Applet类的构造函数只有一种,即: public Applet();,11.2.1 Applet类的基本方法,表11-1 Applet的常用方法,11

12、.2.2 Applet运行状态控制方法,Applet类中提供了四种基本方法用来控制其运行状态:init()、start()、stop()、destroy()。它们构成了创建任何Applet的框架,并实现了一个Applet从诞生、执行到停止、消亡的生命周期。 (1)init()方法:Applet第一次被加载时调用,主要功能是完成初始化操作,包括创建Applet对象、分配内存、设置初始状态等,在Applet生命周期中只运行一次。通常可以在该方法中完成从网页向Applet传递参数,添加用户界面的基本组件等操作。其格式为: public void init() ,(2)start()方法:初始化后或A

13、pplet停止运行随后又重新启动时调用,主要用于创建、启动及重新启动Applet,系统在调用完init()方法之后,将自动调用start()方法。而且,每当用户离开包含该Applet的主页后又再返回时,系统又会再执行一遍start()方法。这就意味着start()方法可以被多次执行,而不像init()方法。因此,可把只希望执行一遍的代码放在init()方法中。可以在start()方法中开始一个线程,如继续一个动画、声音等。在Applet生命周期中,start()方法被调用多次,一般与stop方法配套运行。其格式为: public void start() ,(3)stop()方法:这个方法在用

14、户离开Applet所在页面时执行,该方法的主要功能是停止耗时操作,以免降低系统运行速度,该方法会在Applet生命周期中调用多次。它使你可以在用户并不注意Applet的时候,停止一些耗用系统资源的工作以免影响系统的运行速度,且并不需要人为地去调用该方法。如果Applet中不包含动画、声音等程序,通常也不必实现该方法。,(4)destroy():Web浏览器中的Java解释器重新载入HTML或关闭包含Applet页面的浏览器时调用,该方法的功能是清除Applet,释放其所占用的系统资源。与对象的finalize()方法不同,Java在浏览器关闭的时候才调用该方法。Applet是嵌在HTML文件中

15、的,所以destroty()方法不关心何时Applet被关闭,它在浏览器关闭的时候自动执行。在destroy()方法中一般可以要求收回占用的非内存独立资源。如果在Applet仍在运行时浏览器被关闭,系统将先执行stop()方法,再执行destroy()方法。,11.2.3 Applet应用的有关参数,利用Applet来接收从HTML中传递过来的参数,下面对这些参数作一简单说明: (1)CODE标志 CODE标志指定Applet的类名;WIDTH和HEIGHT标志指定Applet窗口的像素尺寸。在APPLET语句里还可使用其他一些标志。 (2)CODEBASE 标志 CODEBASE标志指定Ap

16、plet的URL地址。Applet的通用资源定位地址URL,它可以是绝对地址,如。也可以是相对于当前HTML所在目录的相对地址,如/AppletPath/Name。如果HTML文件不指定CODEBASE 标志,浏览器将使用和HTML文件相同的URL。,(3)ALT 标志 虽然Java在WWW上很受欢迎,但并非所有浏览器都对其提供支持。如果某浏览器无法运行Java Applet,那么它在遇到APPLET语句时将显示ALT标志指定的文本信息。 (4)ALIGN 标志 ALIGN标志可用来控制把Applet窗口显示在HTML文档窗口的什么位置。与HTML的语句一样,ALIGN标志指定的值可以是TOP

17、、MIDDLE或BOTTOM。 (5)VSPACE与HSPACE 标志 VSPACE和HSPACE标志指定浏览器显示在Applet窗口周围的水平和竖直空白条的尺寸,单位为像素。如下例使用该标志在Applet窗口之上和之下各留出50像素的空白,在其左和其右各留出25像素的空白。,(6)NAME 标志 NAME标志把指定的名字赋予Applet的当前实例。当浏览器同时运行两个或多个Applet时,各Applet可通过名字相互引用或交换信息。如果忽略NAME标志,Applet的名字将对应于其类名。 (7)PARAM 标志 通用性是程序设计所追求的目标之一。使用户或者程序员能很方便地使用同一个Apple

18、t完成不同的任务是通用性的具体表现。从HTML文件获取信息是提高Applet通用性的一条有效途径。,11.3一个显示动画的Applet的程序,Java 不仅提供了对图形、图像的支持,还允许用户实现连续的图像播放,即动画技术。Java 动画的实现,首先用java.awt 包中的Graphics类的drawImage()方法在屏幕上画出图像,然后通过定义一个线程,让该线程睡眠一段时间,然后再切换成另外一幅图像;如此循环,在屏幕上画出一系列的帧来造成运动的感觉,从而达到显示动画的目的。 为了每秒钟多次更新屏幕,必须创建一个线程来实现动画的循环,这个循环要跟踪当前帧并响应周期性的屏幕更新要求;实现线程

19、的方法有两种,可以创建一个类Thread 的派生类,或附和在一个Runnable的界面上。,11.3.1 重载update(),当AWT接收到一个applet的重绘请求时,它就调用applet的 update(),默认地,update() 清除applet的背景,然后调用 paint()。重载 update(),将以前在paint()中的绘图代码包含在update()中,从而避免每次重绘时将整个区域清除。下面是 update()方法的原始程序代码: 【例11-4】 update()方法的原始程序代码。,public void update(Graphics g) /首先用背景色来绘制整个画面g

20、.setColor(getBackGround();g.fillRect(0,0,width,height);/接着设置前景色为绘制图像的颜色,然后调用paint()方法g.setColor(getForeGround();paint(g); ,11.3.2 使用双缓冲技术,另一种减小帧之间闪烁的方法是使用双缓冲,它在许多动画Applet中被使用。其主要原理是创建一个后台图像,将需要绘制的一帧画入图像,然后调用DrawImage()将整个图像一次画到屏幕上去;好处是大部分绘制是离屏的,将离屏图像一次绘至屏幕上比直接在屏幕上绘制要有效得多,大大提高做图的性能。 双缓冲可以使动画平滑,但有一个缺点

21、,要分配一张后台图像,如果图像相当大,这将需要很大一块内存;当你使用双缓冲技术时,应重载update()。,11.3.3 例子,下面的例11-5,通过一个时钟的动态走动,来说明如何处理动画。 【例11-5】 import java.util.*; import java.awt.*; import java.applet.*; import java.text.*; public class AnimatorDemo extends Applet implements Runnable Thread timer; / 用于显示时钟的线程int lastxs, lastys, lastxm, l

22、astym, lastxh, lastyh;SimpleDateFormat formatter; / 格式化时间显示String lastdate; / 保存当前时间的字符串Font clockFaceFont; / 设置显示时钟里面的数字的字体Date currentDate; / 显示当前时间Color handColor; / 用于显示时针、分针和表盘的颜色Color numberColor; / 用于显示秒针和数字的颜色,public void init() int x, y;lastxs = lastys = lastxm = lastym = lastxh = lastyh =

23、0;formatter = new SimpleDateFormat(“yyyy EEE MMM dd hh:mm:ss “);currentDate = new Date();lastdate = formatter.format(currentDate);clockFaceFont = new Font(“Serif“, Font.PLAIN, 14);handColor = Color.blue;numberColor = Color.darkGray;try setBackground(new Color(Integer.parseInt(getParameter(“bgcolor“)

24、,16); catch (Exception E) ,try handColor = new Color(Integer.parseInt(getParameter(“fgcolor1“), 16); catch (Exception E) try numberColor = new Color(Integer.parseInt(getParameter(“fgcolor2“),16); catch (Exception E) resize(300, 300); / 设置时钟窗口大小,/ 计算四分之一的圆弧public void plotpoints(int x0, int y0, int x

25、, int y, Graphics g) g.drawLine(x0 + x, y0 + y, x0 + x, y0 + y);g.drawLine(x0 + y, y0 + x, x0 + y, y0 + x);g.drawLine(x0 + y, y0 - x, x0 + y, y0 - x);g.drawLine(x0 + x, y0 - y, x0 + x, y0 - y);g.drawLine(x0 - x, y0 - y, x0 - x, y0 - y);g.drawLine(x0 - y, y0 - x, x0 - y, y0 - x);g.drawLine(x0 - y, y0

26、 + x, x0 - y, y0 + x);g.drawLine(x0 - x, y0 + y, x0 - x, y0 + y);,/ 用Bresenham算法来画圆,其中(x0,y0)是圆的中心,r为圆半径public void circle(int x0, int y0, int r, Graphics g) int x, y;float d;x = 0;y = r;d = 5 / 4 - r;plotpoints(x0, y0, x, y, g);while (y x) if (d 0) d = d + 2 * x + 3;x+; else d = d + 2 * (x - y) + 5

27、;x+;y-;plotpoints(x0, y0, x, y, g);,public void paint(Graphics g) int xh, yh, xm, ym, xs, ys, s = 0, m = 10, h = 10, xcenter, ycenter;String today;currentDate = new Date();SimpleDateFormat formatter = new SimpleDateFormat(“s“, Locale.getDefault();try s = Integer.parseInt(formatter.format(currentDate

28、); catch (NumberFormatException n) s = 0;formatter.applyPattern(“m“);try m = Integer.parseInt(formatter.format(currentDate); catch (NumberFormatException n) m = 10;,formatter.applyPattern(“h“);try h = Integer.parseInt(formatter.format(currentDate); catch (NumberFormatException n) h = 10;formatter.ap

29、plyPattern(“EEE MMM dd HH:mm:ss yyyy“);today = formatter.format(currentDate);/ 设置时钟的表盘的中心点为(80,55)xcenter = 80;ycenter = 55;/ a= s* pi/2 - pi/2 (to switch 0,0 from 3:00 to 12:00)/ x = r(cos a) + xcenter, y = r(sin a) + ycenterxs = (int) (Math.cos(s * 3.14f / 30 - 3.14f / 2) * 45 + xcenter);ys = (int

30、) (Math.sin(s * 3.14f / 30 - 3.14f / 2) * 45 + ycenter);xm = (int) (Math.cos(m * 3.14f / 30 - 3.14f / 2) * 40 + xcenter);ym = (int) (Math.sin(m * 3.14f / 30 - 3.14f / 2) * 40 + ycenter);xh = (int) (Math.cos(h * 30 + m / 2) * 3.14f / 180 - 3.14f / 2) * 30 + xcenter);yh = (int) (Math.sin(h * 30 + m /

31、2) * 3.14f / 180 - 3.14f / 2) * 30 + ycenter);,运行该Applet 需要的AnimatorDemo.html 的内容。,一个时钟的例子,运行后的结果如下所示:,11.4 Applet中使用URL,Applet类的 public AppletContext getAppletContext(); 方法返回一个AppletContext对象,确定此applet的上下文,上下文允许applet查询和影响它所运行的环境。在Java Applet程序中可以使用这个方法返回一个AppletContext对象,该对象调用 void showDocument(UR

32、L url) 方法完成从嵌入Java Applet的Web页链接另一个Web页面的工作,程序只需提供URL,其他的工作将自动完成。 下面的例子11-7中,在一个文本框中输入网址,然后单击“确定”按钮,即可链接到指定的页面。,import java.applet.*; import java.awt.*; import java.awt.event.*; import .*; public class Boy extends Applet implements ActionListener Button button;URL url;TextField text;public void init

33、() text = new TextField(18);button = new Button(“确定“);add(new Label(“输入网址:“);add(text);add(button);button.addActionListener(this);,public void actionPerformed(ActionEvent e) if (e.getSource() = button) try url = new URL(text.getText().trim();getAppletContext().showDocument(url); catch (MalformedURLE

34、xception g) text.setText(“不正确的URL:“ + url); ,11.5 Applet中建立新线程,Java Applet的主类的对象由浏览器负责创建,然后浏览器会启动一个专门的线程称为Java Applet的主线程,在这个线程中让主类的对象调用strat()方法。因此,应当在Java Applet程序的start()方法中启动其他的线程。 下面的例子11-8是一个左手画圆右手画方的例子。在Java Applet的主线程中创建了两个线程:left和right,其中一个负责画圆,另一个负责画方。在这个例子中,使用了容器类的一个方法getGraphics(),来获取一个G

35、raphics对象。,import java.applet.*; import java.awt.*; public class CircleAndRect extends Applet implements Runnable Thread left, right;Graphics mypen;int x, y;public void init() left = new Thread(this);right = new Thread(this);x = 10;y = 10;mypen = getGraphics();public void start() try left.start();ri

36、ght.start(); catch (Exception e) ,public void run() while (true) if (Thread.currentThread() = left) x = x + 1;if (x 240)x = 10;mypen.setColor(Color.blue);mypen.clearRect(10, 10, 300, 40);mypen.drawRect(10 + x, 10, 40, 40);try left.sleep(60); catch (InterruptedException e) else if (Thread.currentThread() = right) y = y + 1;if (y 240)y = 10;mypen.setColor(Color.red);mypen.clearRect(10, 90, 300, 40);mypen.drawOval(10 + y, 90, 40, 40);try right.sleep(60); catch (InterruptedException e) ,运行Applet,必须定义一个html文件,ep11_8.html文件内容如下:,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报