Java程序设计之网络编程_第1页
Java程序设计之网络编程_第2页
Java程序设计之网络编程_第3页
Java程序设计之网络编程_第4页
Java程序设计之网络编程_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、Java程序设计之网络编程,重庆大学计算机学院 电子邮件:,教学课件,第12章 Applet应用程序,Java应用程序可以分为三大类:Java Application、Java Applet以及Servlet。Java Application是可以独立运行的Java程序,我们在前面涉及的java程序大部分都是Java Application。相对于Java Application而言,Java Applet是不能独立运行,它只能嵌入到浏览器中运行。在HTML文件中,通过一个特定的HTML标签引用Java Applet程序,从而将Applet文件嵌入到网页文件中。当读者访问嵌有Applet的网页

2、时,浏览器会自动从Web服务器上下载Applet程序,并在本机运行的Java虚拟机上运行。,12.1 Applet程序设计基础 12.2 java.applet包 。 12.3 Applet中的多媒体应用 12.4 Applet中的鼠标和键盘事件,主要内容:,12.1 Applet程序设计基础,12.1.1加载Applet Applet是Java语言的又一应用形式。它没有main方法,因而不能由解释器直接解释执行。 为了运行它,我们需要把它放进Web页面。当这个页面在浏览器上显示时,Applet就在页面中指定的一部分区域内显示其运行结果。,12.1.2 Applet的安全性限制,Applet程

3、序的执行需要从Internet上将Applet的伪代码下载到本地系统运行,因此Applet在给人们带来好处的同时,也带来了潜在的安全隐患。 为了防止这样的问题出现,在缺省的情况下,大多数浏览器在Applet安全方面受到诸多的限制,几乎不能对系统进行任何“读”或“写”的操作。,不允许Applet运行时执行另一程序。 不允许Applet访问本地文件系统。 Applet不能执行任何本地计算机上的程序。 不允许Applet尝试打开除提供Applet的服务器之外的任何系统的Socket。 不允许Applet访问用户名、电子邮件地址等与本地系统有关的信息。 对于Applet而言,Java环境中的某些标准系

4、统属性是只读的。,Applet不能创建或装载Applet的机器的网络连接。 Applet不能充当网络服务器,监听或接收来自远程系统的连接请求。 不允许Applet装载动态库或定义本地方法调用。 Applet不能操纵不在自己线程组中的任何线程。 Applet不能关闭JVM。,12.1.3 Applet的生命周期,Applet由运行时系统来构造。当它所在的页面被浏览器装入后,Applet就出生了。 这时系统自动调用init()方法,进行一些必要的初始化工作。 接着,系统将调用start()方法启动Applet的执行。 当浏览器切换到别的页面时,stop()被调用,以终止Applet的执行。,假如浏

5、览器又切换回Applet所在页面,那么运行时系统将从调用start()方法开始Applet的又一次运行。 当浏览器关掉时,Applet走到了它一生的终点。 系统将先调用stop()停止它的执行,然后用destroy( )方法来完成资源回收等收尾工作。 如果浏览器重载页面,就会先令Applet死亡(依次调用stop()和destroy(),然后装入页面(调用init(),开始Applet的又一次生命。,Applet生周期,1init(),当applet被加载时,会首先执行init方法,该方法相当于Application程序中的main,该方法只能被执行一次。Applet可用这个方法来初始化数据的

6、值,比如设置全局变量,初始化对象等等。该方法只在Applet首次装入时被调用,并且在调用start()之前执行完成。 2start() init方法执行完毕会就会自动执行start方法,start方法可以被反复执行,如一个applet被stop后,可以使用start方法重新开动。该方法的执行使得Applet成为“活动”的。无论Applet何时成为可见的,它同样要执行一次,如:当浏览器在被图标化后又恢复时,或者当浏览器在链接到另一个URL后又返回含有这个Applet的页面时。,3stop(),stop方法是在Applet成为不可见时被调用。该方法在当用户不注意Applet的时候,停止一些资源的工

7、作以免影响系统运行效率。比如:在浏览器被图标化或链接到另一个URL时,Applet会调用该方法使动画停止。 4Destroy() 当关闭包含Applet的浏览器窗口时,会调用该方法,以销毁Applet对象,释放对象占用的资源。,12.2 java.applet包,12.2.1 Applet类的继承关系 Java.applet.Applet类实际上是java.awt.Panel的子类。,这种层次关系显示,一个Applet可直接用作一个AWT布局的起始点。因为Applet是 Panel的子类,所以它有一个缺省的流(flow)布局管理器。 Component,Container和Panel类的方法被

8、Applet类继承了下来。而与Panel不同的是,Applet类是一个可以运行的类,创建一个Applet类就相当于创建一个Applet应用程序。,12.2.2 Applet类的方法,1有关运行环境和Applet状态的方法 public AppletContext getAppletContext():用以得到与Applet有关的上下文(AppletContext)对象。此方法与访问Applet的执行环境有关。 public void resize(int width,int height):重新设置Applet所在区域的大小。该方法重写了Component类的resize()方法。它还有一个重

9、载方法。 public void showStatus(String msg):用Applet的上下文(如执行它的浏览器)来显示Applet的状态信息。,public final void setStub(Applet Stub):用来设置与Applet相关的“存根”AppletStub。除非你要构造自己的Applet浏览器,否则不要使用它。由final修饰符可知这个方法是不可重写的。 public Locale getLocale():Local是java.util包中的一个类,封装与国家、语言等相等的地域信息。这个方法用于获取与Appet相关的Locale对象。 public boolea

10、n isActive():判断Applet是否处于被激活的状态。,2用于操作声音、图像资源的方法,public Image getImage(URL url):从给定的URL获取Image对象,用以处理图像。 public Image getImage(URL url,String name) 获取指定URL和名字的Image对象。 public AudioClip getAudioClip(URL url):从给定的URL获取AudioClip对象。,public AudioClip getAudioClip(URL url,String name):获取指定URL和名字的AudioClip

11、对象,这两个方法用以处理声音。 public void play(URL url):用于演奏指定URL的AudioClip对象。 public void play(URL url,String name):用于演奏指定URL和名称的AudioClip对象。,3与生命周期有关的方法,public void init():做初始化工作,在Applet被装入时调用。 public void start():启动Applet的运行。 public void stop():停止Applet运行时被自动调用。 public void destroy():当Applet消亡时被自动调用,一般用来做回收资源等

12、收尾工作。,4与Applet所在页面有关的方法,public URL getCodeBase():返回Applet所在的文档的URL。 public URL getDocumentBase():返回Applet所在的HTML文档的URL。 public String getAppletInfo():返回一个String对象,其中包含Applet的版。本,拷贝权、作者等信息。 public String getParameterInfo():描述Applet参数的名字、类型和描述 public String getParameter(String):得到在HTML文档中传给Applet的参数。,

13、12.2.4 HTML和Applet, alternateHTML ,参数含义,archive = archiveList code = appletFile.class width = pixels height = pixels codebase = codebaseURL alt = alternateText name = appletInstanceName align = alignment vspace = pixels hspace = pixels ,【例121】HelloWord程序,HTML源文件: ,Applet源程序,import java.awt.*; import

14、 java.applet.*; public class helloworld extends Applet private String title; private int size; private int color; public void init() title=Hello World!; size=Integer.parseInt(getParameter(size); /获得字体大小 color=Integer.parseInt(getParameter(color); /获得字体颜色 ,public void paint(Graphics g) Color c=new Co

15、lor(color); g.setColor(c); Font f=new Font(,1,size); g.setFont(f); g.drawString(title,100,80); ,AWT绘图,除了基本的生命周期外,Applet还有与其显示有关的一些重要的方法。这些方法的声明和文档在AWT组件类中。使用AWT做显示处理时遵循正确的模型是非常重要的。 更新显示由一种被称为AWT线程的独立的线程来完成。 这个线程可用来处理与显示更新相关的两种情况。 第一种情况是显露(exposure),它或在首次显示时,或在部分显示已被破坏而必须刷新时出现。显示的破坏可能发生在任何时刻,因此,你的程序必

16、须能在任意时刻更新显示。 第二种情况是在程序重画带有新内容的画面时。这种重画可能会要求首先擦除原来的图像。,与绘图有关的线程及方法,paint(Graphics g)方法 显示处理自动地发生,且导致对paint()方法的一次调用。一种Graphics类的被称为裁剪矩形的设备常用于对paint()方法进行优化。除非必要,更新不会完全覆盖整个图形区域,而是严格限制在被破坏的范围内。 repaint()方法 对repaint()的调用可通知系统:你想改变显示,于是系统将调用paint()。 update(Graphics g)方法 repaint()实际上产生了一个调用另一方法update()的AW

17、T线程。update方法通常清除当前的显示并调用paint()。update()方法可以被修改,如:为了减少闪烁可不清除显示而直接调用paint()。 法的交互 下面的框图描述了paint(),update()和repaint()方法间的内在关系,12.2.4 Appletviewer,为了简化和加速开发过程,JDK附带了一个专为查看Applet而设计但不支持HTML页面查看的工具。这个工具就是Appletviewer,它使你不必使用Web浏览器即可运行Applet的一个Java应用程序。,12.2.5 Applet的显示,除了基本的生命周期外,Applet还有与其显示有关的一些重要的方法,包

18、括:paint()、repaint()和update()方法。这些方法是Applet显示和刷新的重要工具,它们的声明和文档在AWT组件类中。Applet的更新显示都是由AWT线程来独立控制完成。,12.3 Applet中的多媒体应用,12.3.1URL URL(Uniform Resoure Locator:统一资源定位器)是Internet上各种资源的定位地址。在Java语言中URL类封装了多个URL,一般有两种方法创建一个URL对象: URL u=new URL(“ URL data=new URL(u,”data/planets.dat”);,第一种方法向URL构造器传递一个字符串,且指

19、定了整个资源的名称,因此称为绝对URL。第二种方法可以产生相对URL,它指定的planets.dat文件位于URL对象u的data子目录中。 在Applet类中有两个方法可以获得对象的URL: public URL getCodeBase():返回Applet所在的文档的URL。 public URL getDocumentBase():返回Applet所在的HTML文档的URL。,12.3.2加载图像,Applet类中,加载图像文件的方法有两个: public Image getImage(URL url):从给定的URL获取Image对象,用以处理图像。 public Image getI

20、mage(URL url, String name) 获取指定URL和名字的Image对象。,Graphics类中显示图像文件的方法也有两个: drawImage(Image img, int x, int y, ImageObserver obs):在指定的位置显示图像对象img。 drawImage(Image img, int x, int y, int width, int height, ImageObserver obs):将图像对象img缩小或放大到指定大小,并在指定位置显示图像。,【例12-2】加载并显示图像,Applet源程序 import java.awt.*; impor

21、t java.applet.*; public class display_image extends Applet Image labmag; public void init() labmag=getImage(getDocumentBase(),image.jpg); public void paint(Graphics g) g.drawImage (labmag,0,0,this); g.drawImage (labmag,0,150,200,100,this); ,HTML源程序 ,12.3.3播放声音,播放一段声音文件的最简单的方式是通过Applet的play方法: public

22、 void play(URL url):用于演奏指定URL的AudioClip对象。 public void play(URL url,String name):用于演奏指定URL和名称的AudioClip对象。,【例123】用play方法播放声音文件,import java.awt.Graphics; import java.applet.Applet; public class play_audio extends Applet public void paint(Graphics g) g.drawString(Audio Test, 25, 25); play(getDocumentB

23、ase(),audio.wav); ,AudioClip类,1)装入一段Audio Clip 要转载一个声音文件,必须先通过指定的声音文件生成一个AudioClip对象。在Applet中有两种方法可以获取声音文件并生成一个AudioClip对象: public AudioClip getAudioClip(URL url):从给定的URL获取AudioClip对象。 public AudioClip getAudioClip(URL url,String name):获取指定URL和名字的AudioClip对象,这两个方法用以处理声音。,2)播放AudioClip对象 一旦一段clip被装载,

24、可选择与之相关的三个方法之一:play,loop,或stop play():将已装入的AudioClip对象播放一遍。 loop():启动AudioClip对象的播放并不断循环(自动重放)。 stop(),【例124】循环播放声音,import java.awt.Graphics; import java.applet.*; public class loop_audio extends Applet AudioClip sound; public void init() sound = getAudioClip(getDocumentBase(), audio.wav); public vo

25、id paint(Graphics g) g.drawString(Loop Audio Test, 25, 25); public void start() sound.loop(); public void stop() sound.stop(); ,12.5 Applet编程实例【例128】一个通过Applet显示时钟的例子,import java.awt.*; import java.applet.*; import java.util.Date; /这是Java中的低级实用工具包,可以处理时间等内容。 public class display_clock extends Applet

26、 implements Runnable /有线程运行接口 Date timenow; /Date是一个时间定义与创建函数. Clock myClock; /用户自定义的类 Thread clockthread=null; /设置一个线程 public void start() /线程开始的类 if (clockthread=null) /如果线程为空,则 clockthread=new Thread (this); /开始新的线程 clockthread.start(); /开始,public void stop() /终止线程 clockthread.stop(); clockthread

27、=null; public void run() /运行线程 while(true) /一个死循环,条件永远都是真的。 repaint(); /重新绘制界面 tryThread.sleep(1000); /让线程沉睡1000毫秒, catch(InterruptedException e) /捕获异常(也就是错误) public void paint(Graphics g) timenow=new Date(); /新的时间的获得 myClock=new Clock(timenow.getHours (), timenow.getMinutes (), timenow.getSeconds (); g.drawString(timenow.toString(),25,240);/将它打印出来! myClock.show(g,100,100,100); /使面板显示 ,class Clock Cl

温馨提示

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

评论

0/150

提交评论