版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、9.1 Applet的特点第九章 Applet应用程序9.4 Applet应用9.2 Applet类9.3 HTML和Applet1第1页,共44页。http:/someLocation/file.html1. Browser loads URL2. Browser loads HTML documentApplet class3. Browser loads applet classes4. Browser run appletLoading.Location http:/someLocation/file.html2第2页,共44页。Applet的安全限制因为applet是从远端服务器上下
2、载并且在本地执行,所以安全性就显得格外重要。通过限制applet在沙箱(applet的运行环境)中运行,保证了对本地系统而言applet是安全的。applet在沙箱中运行时:不能运行任何本地可执行程序;除了存放下载的applet的服务器外,applet不能和其它主机进行通信。不能对本地文件系统进行读写。3第3页,共44页。appletBrowserlocal小应用程序的限制本地程序file本地方法SERVER与applet无关的connectionSERVERapplet被下载的connection4第4页,共44页。一个简单例子:import java.applet.*;import jav
3、a.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 5第5页,共44页。Java.applet.Appletpublic void init()public void destroy()public void start()public void stop()public void pai
4、nt(Graphics g)Applet的运行控制6第6页,共44页。Applet的生命周期初始态(瞬态)运行态停止态消亡态离开web页面:极小化或装入其他页面,调用stop()方法重新装入或改变页面大小或返回Web页面,调用start()方法关闭浏览器,调用destroy()方法第一次装入,构造applet类,调用init()方法调用start()方法7第7页,共44页。 Applet中没有main()方法。当Applet被浏览器运行时, init() 、start()、stop()、destroy()方法等自动执行: init()方法:初始化,自动调用,只执行一次。 本方法主要完成一些Ap
5、plet构造方法所不能完成的工作。 start()方法:初始化后,重入等都将自动调用。 本方法是Applet的主体,在其中可以执行一些任务或启 动相关的线程来执行任务。 stop()方法:离开Applet所在页面时调用,以停止消耗 系统资源。 destroy()方法:浏览器关闭时自动调用,以清除Applet 所用的所有资源。8第8页,共44页。import java.awt.*;public class SimpleApplet extends java.applet.Applet StringBuffer buffer; public void init() buffer = new Str
6、ingBuffer(); 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(newWord); repaint(); public void paint(Grap
7、hics g) g.drawRect(0, 0, getSize().width - 1, getSize().height - 1); g.drawString(buffer.toString(), 5, 15); SimpleApplet.javaApplet的运行控制9第9页,共44页。 除了四个Applet生命周期控制的方法外,Applet类还提供了一些其他有用的方法: public AppletContext getAppletContext() public String getAppletInfo():应该被覆盖 public URL getDocumentBase() publ
8、ic URL getCodeBase() public String getParameter(Stringname) public String getParameterInfo() :应该被覆盖 public void showStatus(Stringmsg) public boolean isActive() 10第10页,共44页。 . . . alternateHTML Applet 与 HTML11第11页,共44页。ARCHIVE = archiveList File1, File2, 给出了Applet类及其运行时所需的类所在的卷文件名。ALIGN = alignment A
9、pplet在浏览器中显示时的对齐方式,其含义与效果与图片在HTML中的一样。其取值有: left, right, top, texttop, middle, absmiddle, baseline, bottom, absbottom。 。CODE = appletFile 指明需要运行的Applet类文件(.class文件),该文件是与codebaseURL相关的。NAME = appletInstanceName 给出了Applet类运行时的实例名,这使得同处于一个页面的不同Applet之间能够相互通信。方法getAppletContext()可以得到同一个方页面中其它Applet类。 1
10、2第12页,共44页。CODEBASE = codebaseURL 指明Applet类文件所在URL基址,在Applet类中,方法 getCodeBase()可以获取该属性。如果这个属性没有指明, 那么Applet类文件必须与包含它的HTML页面在同一个地 方,方法getCodeBase()返回的值与getDocumentBase()相同。ALT = alternateText 如果浏览器支持Applet但不能运行它,就显示alternateText 中所给出的文字。否则就忽略它。 WIDTH = pixels HEIGHT = pixels Applet在浏览器中所显示的高度和宽度(以象素为
11、单位)。 VSPACE = pixels HSPACE = pixels Applet在浏览器中显示时上下、左右要预留的高度和宽度, 其含义与效果与图片在HTML中的一样。13第13页,共44页。 属性可以使得Applet能够从页面中获取所需的参数。Applet可以用其方法getParameter()获取属性指定的参数。属性的作用与应用程序中main()方法里参数String args的作用是一样的。一个好的小应用程序,应该提供用户能够设置外部参数的功能,以使得用户能够根据自己的需要来应用它。方法getParameterInfo()可以得到有关属性的说明信息。alternateHTML如果浏览
12、器不支持Applet,就解释alternateHTML所给出的HTML代码。否则就忽略它。14第14页,共44页。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 Parameter
13、Test 两个步骤: 在Applet类中: s1 = getParameter(p1); 在页面中设置Applet参数: AppletPara.java15第15页,共44页。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,又是一个Java
14、 Application,它既可以在浏览器中运行,又可以作为Application单独运行。public static void main( String args ) Frame f = new Frame(“Applet-App”); AppletApp app = new AppletApp(); f.add(app, “Center”); f.setSize(200, 200); f.setVisible(true); f.addWindowListener( new WindowAdapter() public void windowClosing(WindowEvent e) Sy
15、stem.exit(0); ); app.init(); app.start();AppletApp.javaApplet 与 Application16第16页,共44页。图形操作 paint()、update()和repaint()Applet本身是一个AWT组件,因此它也具有一般AWT组件的图形绘制功能。Applet中有三个显示相关的方法:paint()、update() 、repaint( )Applet的显示更新是由一个AWT线程来控制完成的,它主要负责两种显示更新情况: (1) 第一是曝光,表示部分显示区域被遮盖、调整大小、最大最小化等,这种情况随时会发生,需要系统调用paint(
16、)方法; (2) 第二是程序需要重画显示区域,添加一些新的显示内容,需要程序调用repaint()方法。17第17页,共44页。AWT thread(waiting)update():clear areacall paint()paint()程序调用repaint()Exposure:遮盖、调整大小、最大最小化等18第18页,共44页。 paint( Graphics g )方法 Applet本身是一个容器,因此任何输出都必须用图形方法paint()。当小应用首次被装载,以及每次窗口放大、缩小、刷新时都要调用paint()方法。paint()是由AWT线程调用的,而不是由程序调用,当程序希望调
17、用paint方法时,用repaint()方法。 paint()方法的参数是Graphics类的对象 g,该对象不是由new产生的,而是由系统或其他方式直接将生成好的Graphics对象当作方法的参数,再交给paint()方法。 paint()方法必须被重写以绘制自己所需的内容。19第19页,共44页。 update()方法 update()方法用于更新图形。它首先清除背景,然后设置前景,再调用paint()方法完成Applet中的具体绘图。一般不重写update()方法。 repaint()方法 repaint()方法主要用于重绘图形,它是通过调用update()方法来实现图形重绘的。当组件外
18、形发生变化时,系统自动调用repaint()方法。 AWT线程要处理组件的绘图工作,并负责其输入事件,因此必须尽量缩短paint()方法和update()方法的长度,特别是在paint()方法中,不要执行太消耗时间的操作。20第20页,共44页。 在paint()方法中有一个Graphics类参数,它是画图的关键。它支持两种绘制:一是基本的绘图,包括画点、线、矩形、文字等;二是画图象。在进行基本画图时,可以设定所需的颜色和字体等,这需要用到Font、FontMetrics和Color三个类。21第21页,共44页。 Applet本身是一个AWT组件,因此可以对其中所发生的事件进行处理,其处理与
19、前面所讲的图形用户界面程序的设计是一样的。22第22页,共44页。 Applet是从java.awt.Panel继承而来,因此它本身也是一个容器,可以往其中添加其他的AWT组件,从而构造更复杂、更有用的Applet程序。 往Applet中添加其他AWT组件及其事件处理与前面所讲的图形用户界面程序的设计是一样的。23第23页,共44页。播放声音 Java语言提供了播放声音的方法,但目前Java只支持“*.au”格式的声音,而且只有在Applet中才能播放声音,Application中是不行的。有两种方法可以在Applet中实现播放声音。 第一种方法是利用Applet类提供的方法直接播放声音: p
20、ublic void play(URL url) public void play(URL url, String name) 例:play( getCodeBase(), “boing.au”); 但这两个方法是一次性播放的,不能反复播放。要想反复播放,就必须使用第二种方法。24第24页,共44页。 第二种方法是利用接口java.applet.AudioClip和Applet类一起实现声音播放。 接口AudioClip中有三个方法: public void play():播放一遍 public void loop() :循环播放 public void stop() :停止播放 AudioC
21、lip是一个接口,因此不能直接new出一个声音对象实例,它必须和Applet类一起使用,利用Applet类提供的声音装载方法载入一个声音文件,形成一个声音对象实例: public AudioClip getAudioClip(URLurl) public AudioClip getAudioClip(URLurl, Stringname) 装载的声音文件后,就可以利用AudioClip的方法来进行声音操作了。25第25页,共44页。public class SoundPlay extends Applet AudioClip sound; public void init() try soun
22、d = getAudioClip(getDocumentBase(), spacemusic.au); catch(Exception e) public void start() sound.loop(); public void paint(Graphics g) g.drawString(“正在播放音乐.” + spacemusic.au, 5, 10); public void stop() sound.stop(); public class SoundPlay1 extends Applet public void start() play(getDocumentBase(), s
23、pacemusic.au); public void paint(Graphics g) g.drawString(“正在播放音乐.” + getDocumentBase() + : spacemusic.au, 5, 10); 26第26页,共44页。动态效果 先看一个简单的动态效果的例子:简单时钟SimpleClock.java 无论在Applet中还是在Application中,实现动态效果的关键是使用线程。开始Applet主控线程1线程3不断刷新Applet中显示内容AWT绘图线程227第27页,共44页。让Applet类去实现Runable接口,创建一个线程类改写start方法,在其
24、中产生一个新的线程来工作改写stop方法,在其中编写结束线程的程序代码引入新的方法,将分给线程的工作写到run中在Applet中实现一个线程:28第28页,共44页。第一步:实现Runable接口public class xApplet extends Applet implements Runnable Thread animatorThread = null; Thread是一个类,只有是它的实例才能具有线程的功能。 在主函数中要定义一个线程变量。29第29页,共44页。第二步:改写方法startpublic void start() if( animatorThread = null )
25、 animatorThread = new Thread(this); animatorThread.start(); /从现在开始程序多了 一个线程在执行 第三步:改写stop方法public void stop() smallthread.stop(); /停止线程 smallthread = null; /释放线程对象30第30页,共44页。第四步:新的方法run,控制线程的运行。 让线程要做的事放run中。动态效果的展现其实是一个循环过程,其中的三个关键动作就是控制动态效果的延迟、确定刷新的内容以及重画。31第31页,共44页。public void run() Thread.curr
26、entThread().setPriority(Thread.MIN_PRIORITY); long startTime = System.currentTimeMillis(); while (Thread.currentThread() = animatorThread) repaint(); /重画 try startTime += delay; Thread.sleep(Math.max(0, startTime- System.currentTimeMillis(); catch (InterruptedException e) 32第32页,共44页。同页 Applet 之间的通信
27、 Communication among Appelt in same page. 33第33页,共44页。Applet和浏览器之间的通信Applet中提供了很多函数来与显示它的浏览器之间进行通信: public URL getCodeBase() public URL getDocumentBase() public String getParameter(Stringname) public void showStatus(Stringmsg) public AppletContext getAppletContext()Applet可以用这五个方法从浏览器中获取信息或者向浏览器发送信息。
28、 public String getParameterInfo() public String getAppletInfo()浏览器可以使用Applet的这两个方法来获取Applet的相关信息。34第34页,共44页。public AppletContext getAppletContext() 同一页面不同Applet之间的通信也是要通过这个方法来获得起运行环境的(AppletContext),再利用AppletContext提供的方法getApplet()来获取其它的Applet从而达到相互通信的目的。 AppletContext中还提供了showDocument()方法来向浏览器发送请求
29、,以显示一个URL页面:void showDocument( URL url)void showDocument( URL url, String target )35第35页,共44页。void showDocument( URL url) 指定的HTML页面将在Applet所在地浏览器窗口中显示。void showDocument( URL url, String target ) 在本方法中,可以指明显示HTML页面的窗口,target就是 用来指明在浏览器窗口的,不同的取值指明了不同的窗口:“_self”:在Applet所在的窗口中显示HTML页面“_parent”:在Applet所在
30、的窗口的父窗口中显示HTML页面“_top”:在最前面的窗口中显示HTML页面“_blank”:在新的窗口中显示HTML页面name:在指定名称的窗口中显示HTML页面36第36页,共44页。Applet的网络通信 在Applet中可以进行网络通信,但是由于安全性的限制,Applet只能和提供它的主机进行通信。 通过类Applet的getCodeBase()方法获得提供它的主机的URL实例 利用类URL的getHost()方法得到主机名 利用类InetAddress的getByName()得到该主机的IP地址 通过IP地址,就可以进行网络通信(TCP, UDP)URL url = getCod
31、eBase();String host = url.getHost();Try InetAddress address = InetAddress.getByName(host);catch(Exception e)Try DatagramSocket socket = new DatagramSocket(); DatagramPacket packet = new DatagramPacket(buf, length, address, port); socket.send(packet);catch(Exception e)37第37页,共44页。系统属性 在System类中,提供了一个
32、方法:String getProperty(String)来获取系统属性,系统属性包括:KeyMeaningfile.separatorFile separator (for example, /)java.class.pathJava classpathjava.class.versionJava class version numberjava.homeJava installation directoryjava.vendorJava vendor-specific stringjava.vendor.urlJava vendor URLjava.versionJava version
33、numberline.separatorLine separatoros.archOperating system architectureOperating system nameos.versionOperating system versionpath.separatorPath separator (for example, :)user.dirUsers current working directoryuser.homeUser home directoryUser account name38第38页,共44页。KeyMeaningfile.separatorFile separator (for example, /)java.class.versionJava class version numberjava.vendorJava vendor-specific stringjava.vendor.urlJava vendor URLjava.versionJava version numberline.separatorLine separatoros.archOperating system architectureOperating system namepath.separatorPath separator (for example, :) 在Ap
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 办公楼升级改造外包合同
- 积木拼装手工外包合同
- 高端青年公寓外包合同
- 护理信息化技术与应用
- 手术室护理工作压力与应对策略
- 物业管家服务外包合同
- 扬州市销售团队外包合同
- 宿迁医院食堂外包合同
- 劳动合同到期签外包合同
- 银行车贷专员外包合同
- 《沉积环境与沉积相》课件:解读地球历史的信息载体
- 西藏事业单位c类历年真题
- 能源行业职业技能大赛(汽轮机和水轮机检修工)赛项考试题及答案
- 《概率论与数理统计》教材
- 一类切口预防性使用抗菌药物
- 湖南省长沙市雅礼教育集团2023-2024学年七年级下学期期末语文试题
- JT-T 1172.2-2023 系列2集装箱 技术要求和试验方法 第2部分:保温集装箱
- GB/T 2910.11-2024纺织品定量化学分析第11部分:某些纤维素纤维与某些其他纤维的混合物(硫酸法)
- DL-T 5860-2023 电化学储能电站可行性研究报告内容深度规定
- 水上清洁机器人项目计划书
- QCT 291-2023 汽车机械式分动器总成性能要求和台架试验方法 (正式版)
评论
0/150
提交评论