Java课件第九章Applet应用程序_第1页
Java课件第九章Applet应用程序_第2页
Java课件第九章Applet应用程序_第3页
Java课件第九章Applet应用程序_第4页
Java课件第九章Applet应用程序_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,9.1 Applet的特点,9.4 Applet应用,9.2 Applet类,9.3 HTML和Applet,2,3,Applet的安全限制,因为applet是从远端服务器上下载并且在本地执行,所以安全性就显得格外重要。 通过限制applet在沙箱(applet的运行环境)中运行,保证了对本地系统而言applet是安全的。 applet在沙箱中运行时: 不能运行任何本地可执行程序; 除了存放下载的applet的服务器外,applet不能和其它主机进行通信。 不能对本地文件系统进行读写。,4,applet,Browser,local,小应用程序的限制,5,一个简单例子:,import jav

2、a.applet.*; import java.awt.*; public class HelloApplet extends Applet public String s; public void init() s = new String(“Hello World!”); public void paint(Graphics g) g.drawString(s,25,25); , Hello World ,6,Applet的运行控制,7,Applet的生命周期,8,Applet中没有main()方法。当Applet被浏览器运行时, init() 、start()、stop()、destro

3、y()方法等自动执行: init()方法:初始化,自动调用,只执行一次。 本方法主要完成一些Applet构造方法所不能完成的工作。 start()方法:初始化后,重入等都将自动调用。 本方法是Applet的主体,在其中可以执行一些任务或启 动相关的线程来执行任务。 stop()方法:离开Applet所在页面时调用,以停止消耗 系统资源。 destroy()方法:浏览器关闭时自动调用,以清除Applet 所用的所有资源。,9,import java.awt.*; public class SimpleApplet extends java.applet.Applet StringBuffer b

4、uffer; public void init() buffer = new StringBuffer(); addItem(initializing. ); public void start() addItem(starting. ); public void stop() addItem(stopping. ); ,public void destroy() addItem(preparing for unloading(destroy).); void addItem(String newWord) System.out.println(newWord); buffer.append(

5、newWord); repaint(); public void paint(Graphics g) g.drawRect(0, 0, getSize().width - 1, getSize().height - 1); g.drawString(buffer.toString(), 5, 15); ,SimpleApplet.java,Applet的运行控制,10,除了四个Applet生命周期控制的方法外,Applet类还提供了一些其他有用的方法: public AppletContext getAppletContext() public String getAppletInfo():应

6、该被覆盖 public URL getDocumentBase() public URL getCodeBase() public String getParameter(Stringname) public String getParameterInfo() :应该被覆盖 public void showStatus(Stringmsg) public boolean isActive(),11, . . . alternateHTML ,Applet 与 HTML,12,ARCHIVE = archiveList File1, File2, 给出了Applet类及其运行时所需的类所在的卷文

7、件名。 ALIGN = alignment Applet在浏览器中显示时的对齐方式,其含义与效果与图片在HTML中的一样。其取值有: left, right, top, texttop, middle, absmiddle, baseline, bottom, absbottom。 。 CODE = appletFile 指明需要运行的Applet类文件(.class文件),该文件是与codebaseURL相关的。 NAME = appletInstanceName 给出了Applet类运行时的实例名,这使得同处于一个页面的不同Applet之间能够相互通信。方法getAppletContext

8、()可以得到同一个方页面中其它Applet类。,13,CODEBASE = codebaseURL 指明Applet类文件所在URL基址,在Applet类中,方法 getCodeBase()可以获取该属性。如果这个属性没有指明, 那么Applet类文件必须与包含它的HTML页面在同一个地 方,方法getCodeBase()返回的值与getDocumentBase()相同。 ALT = alternateText 如果浏览器支持Applet但不能运行它,就显示alternateText 中所给出的文字。否则就忽略它。 WIDTH = pixels HEIGHT = pixels Applet在浏

9、览器中所显示的高度和宽度(以象素为单位)。 VSPACE = pixels HSPACE = pixels Applet在浏览器中显示时上下、左右要预留的高度和宽度, 其含义与效果与图片在HTML中的一样。,14, 属性可以使得Applet能够从页面中获取所需的参数。 Applet可以用其方法getParameter()获取属性指定的参数。 属性的作用与应用程序中main()方法里参数String args的作用是一样的。 一个好的小应用程序,应该提供用户能够设置外部参数的功能,以使得用户能够根据自己的需要来应用它。方法getParameterInfo()可以得到有关属性的说明信息。 alte

10、rnateHTML 如果浏览器不支持Applet,就解释alternateHTML所给出的HTML代码。否则就忽略它。,15,import java.awt.*; public class AppletPara extends java.applet.Applet String s1,s2; public void init() s1 = getParameter(p1); s2 = getParameter(p2); public void paint(Graphics g) g.drawString(s1,10,10); g.drawString(s2,10,30); , Applet P

11、arameter Test ,两个步骤: 在Applet类中: s1 = getParameter(p1); 在页面中设置Applet参数: ,AppletPara.java,16,import java.awt.*; public class AppletApp extends Applet public String s; public void init() s = new String(“Hello World!”); public void paint(Graphics g) g.drawString(s,25,25); ,一个Java类文件可以既是一个Java Applet,又是一

12、个Java Application,它既可以在浏览器中运行,又可以作为Application单独运行。,AppletApp.java,Applet 与 Application,17,图形操作 paint()、update()和repaint(),Applet本身是一个AWT组件,因此它也具有一般AWT组件的图形绘制功能。 Applet中有三个显示相关的方法:paint()、update() 、repaint( ) Applet的显示更新是由一个AWT线程来控制完成的,它主要负责两种显示更新情况: (1) 第一是曝光,表示部分显示区域被遮盖、调整大小、最大最小化等,这种情况随时会发生,需要系统调

13、用paint()方法; (2) 第二是程序需要重画显示区域,添加一些新的显示内容,需要程序调用repaint()方法。,18,19,paint( Graphics g )方法 Applet本身是一个容器,因此任何输出都必须用图形方法paint()。当小应用首次被装载,以及每次窗口放大、缩小、刷新时都要调用paint()方法。paint()是由AWT线程调用的,而不是由程序调用,当程序希望调用paint方法时,用repaint()方法。 paint()方法的参数是Graphics类的对象 g,该对象不是由new产生的,而是由系统或其他方式直接将生成好的Graphics对象当作方法的参数,再交给p

14、aint()方法。 paint()方法必须被重写以绘制自己所需的内容。,20,update()方法 update()方法用于更新图形。它首先清除背景,然后设置前景,再调用paint()方法完成Applet中的具体绘图。一般不重写update()方法。 repaint()方法 repaint()方法主要用于重绘图形,它是通过调用update()方法来实现图形重绘的。当组件外形发生变化时,系统自动调用repaint()方法。 AWT线程要处理组件的绘图工作,并负责其输入事件,因此必须尽量缩短paint()方法和update()方法的长度,特别是在paint()方法中,不要执行太消耗时间的操作。,2

15、1,在paint()方法中有一个Graphics类参数,它是画图的关键。它支持两种绘制:一是基本的绘图,包括画点、线、矩形、文字等;二是画图象。在进行基本画图时,可以设定所需的颜色和字体等,这需要用到Font、FontMetrics和Color三个类。,22,Applet本身是一个AWT组件,因此可以对其中所发生的事件进行处理,其处理与前面所讲的图形用户界面程序的设计是一样的。,23,Applet是从java.awt.Panel继承而来,因此它本身也是一个容器,可以往其中添加其他的AWT组件,从而构造更复杂、更有用的Applet程序。 往Applet中添加其他AWT组件及其事件处理与前面所讲的

16、图形用户界面程序的设计是一样的。,24,播放声音,Java语言提供了播放声音的方法,但目前Java只支持“*.au”格式的声音,而且只有在Applet中才能播放声音,Application中是不行的。有两种方法可以在Applet中实现播放声音。 第一种方法是利用Applet类提供的方法直接播放声音: public void play(URL url) public void play(URL url, String name) 例:play( getCodeBase(), “boing.au”); 但这两个方法是一次性播放的,不能反复播放。要想反复播放,就必须使用第二种方法。,25,第二种方法

17、是利用接口java.applet.AudioClip和Applet类一起实现声音播放。 接口AudioClip中有三个方法: public void play():播放一遍 public void loop() :循环播放 public void stop() :停止播放 AudioClip是一个接口,因此不能直接new出一个声音对象实例,它必须和Applet类一起使用,利用Applet类提供的声音装载方法载入一个声音文件,形成一个声音对象实例: public AudioClip getAudioClip(URLurl) public AudioClip getAudioClip(URLurl

18、, Stringname) 装载的声音文件后,就可以利用AudioClip的方法来进行声音操作了。,26,public class SoundPlay extends Applet AudioClip sound; public void init() try sound = getAudioClip(getDocumentBase(), spacemusic.au); catch(Exception e) public void start() sound.loop(); public void paint(Graphics g) g.drawString(“正在播放音乐.” + space

19、music.au, 5, 10); public void stop() sound.stop(); ,public class SoundPlay1 extends Applet public void start() play(getDocumentBase(), spacemusic.au); public void paint(Graphics g) g.drawString(“正在播放音乐.” + getDocumentBase() + : spacemusic.au, 5, 10); ,27,动态效果,先看一个简单的动态效果的例子:简单时钟,SimpleClock.java,无论在

20、Applet中还是在Application中,实现动态效果的关键是使用线程。,28,让Applet类去实现Runable接口,创建一个线程类,改写start方法,在其中产生一个新的线程来工作,改写stop方法,在其中编写结束线程的程序代码,引入新的方法,将分给线程的工作写到run中,在Applet中实现一个线程:,29,第一步:实现Runable接口 public class xApplet extends Applet implements Runnable Thread animatorThread = null; Thread是一个类,只有是它的实例才能具有线程的功能。 在主函数中要定义

21、一个线程变量。,30,第二步:改写方法start public void start() if( animatorThread = null ) animatorThread = new Thread(this); animatorThread.start(); /从现在开始程序多了 一个线程在执行 第三步:改写stop方法 public void stop() smallthread.stop(); /停止线程 smallthread = null; /释放线程对象 ,31,第四步:新的方法run,控制线程的运行。 让线程要做的事放run中。动态效果的展现其实是一个循环过程,其中的三个关键动

22、作就是控制动态效果的延迟、确定刷新的内容以及重画。,32,public void run() Thread.currentThread().setPriority(Thread.MIN_PRIORITY); long startTime = System.currentTimeMillis(); while (Thread.currentThread() = animatorThread) repaint(); /重画 try startTime += delay; Thread.sleep(Math.max(0, startTime- System.currentTimeMillis();

23、catch (InterruptedException e) ,33,同页 Applet 之间的通信, Communication among Appelt in same page. ,34,Applet和浏览器之间的通信,Applet中提供了很多函数来与显示它的浏览器之间进行通信: public URL getCodeBase() public URL getDocumentBase() public String getParameter(Stringname) public void showStatus(Stringmsg) public AppletContext getApple

24、tContext() Applet可以用这五个方法从浏览器中获取信息或者向浏览器发送信息。 public String getParameterInfo() public String getAppletInfo() 浏览器可以使用Applet的这两个方法来获取Applet的相关信息。,35,public AppletContext getAppletContext() 同一页面不同Applet之间的通信也是要通过这个方法来获得起运行环境的(AppletContext),再利用AppletContext提供的方法getApplet()来获取其它的Applet从而达到相互通信的目的。 Apple

25、tContext中还提供了showDocument()方法来向浏览器发送请求,以显示一个URL页面: void showDocument( URL url) void showDocument( URL url, String target ),36,void showDocument( URL url) 指定的HTML页面将在Applet所在地浏览器窗口中显示。 void showDocument( URL url, String target ) 在本方法中,可以指明显示HTML页面的窗口,target就是 用来指明在浏览器窗口的,不同的取值指明了不同的窗口: “_self”:在Apple

26、t所在的窗口中显示HTML页面 “_parent”:在Applet所在的窗口的父窗口中显示HTML页面 “_top”:在最前面的窗口中显示HTML页面 “_blank”:在新的窗口中显示HTML页面 name:在指定名称的窗口中显示HTML页面,37,Applet的网络通信,在Applet中可以进行网络通信,但是由于安全性的限制,Applet只能和提供它的主机进行通信。 通过类Applet的getCodeBase()方法获得提供它的主机的URL实例 利用类URL的getHost()方法得到主机名 利用类InetAddress的getByName()得到该主机的IP地址 通过IP地址,就可以进行网络通信(TCP, UDP),URL url = getCodeBase(); String host = url.getHost(); Try InetAddress address = InetAddress.getByName(host); catch(Exception e) Try Datagr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论