友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

Java编程思想第4版[中文版](PDF格式)-第126章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




那个库的框架。  

(2) “GUI 构建器”(可视编程环境)将适用于所有开发系统。在我们用图形化工具将组件置入窗体的时候, 

Java Beans 和新的 AWT 使 GUI 构建器能帮我们自动完成代码。其它组件技术如ActiveX 等也将以相同的形式 

支持。  

  

既然如此,为什么还要学习使用老的AWT 呢?原因很简单,因为它的存在是个事实。就目前来说,这个事实 

对我们来说显得有些不利,它涉及到面向对象库设计的一个宗旨:一旦我们在库中公布一个组件,就再不能 

去掉它。如去掉它,就会损害别人已存在的代码。另外,当我们学习 Java 和所有使用老AWT 的程序时,会发 

现有许多原来的代码使用的都是老式AWT 。  



                                                                 378 


…………………………………………………………Page 380……………………………………………………………

AWT 必须能与固有操作系统的GUI 组件打交通,这意味着它需要执行一个程序片不可能做到的任务。一个不 

被信任的程序片在操作系统中不能作出任何直接调用,否则它会对用户的机器做出不恰当的事情。一个不被 

信任的程序片不能访问重要的功能。例如,“在屏幕上画一个窗口”的唯一方法是通过调用拥有特殊接口和 

安全检查的标准Java 库。Sun 公司的原始模型创建的信任库将仅仅供给 Web 浏览器中的 Java 系统信任关系 

自动授权器使用,自动授权器将控制怎样进入到库中去。  

但当我们想增加操作系统中访问新组件的功能时该怎么办?等待Sun 来决定我们的扩展被合并到标准的 Java 

库中,但这不一定会解决我们的问题。Java 1。1 版中的新模型是“信任代码”或“签名代码”,因此一个特 

殊服务器将校验我们下载的、由规定的开发者使用的公共密钥加密系统的代码。这样我们就可知道代码从何 

而来,那真的是Bob 的代码,还是由某人伪装成Bob 的代码。这并不能阻止Bob 犯错误或作某些恶意的事, 

但能防止Bob 逃避匿名制造计算机病毒的责任。一个数字签名的程序片—— “被信任的程序片”——在Java  

1。1版能进入我们的机器并直接控制它,正像一些其它的应用程序从信任关系自动授权机中得到“信任”并 

安装在我们的机器上。  

这是老AWT 的所有特点。老的AWT 代码将一直存在,新的 Java 编程者在从旧的书本中学习时将会遇到老的 

AWT 代码。同样,老的 AWT 也是值得去学习的,例如在一个只有少量库的例程设计中。老的AWT 所包括的范 

围在不考虑深度和枚举每一个程序和类,取而代之的是给了我们一个老AWT 设计的概貌。  



13。2 基本程序片  



库通常按照它们的功能来进行组合。一些库,例如使用过的,便中断搁置起来。标准的Java 库字符串和矢量 

类就是这样的一个例子。其他的库被特殊地设计,例如构建块去建立其它的库。库中的某些类是应用程序的 

框架,其目的是协助我们构建应用程序,在提供类或类集的情况下产生每个特定应用程序的基本活动状况。 

然后,为我们定制活动状况,必须继承应用程序类并且废弃程序的权益。应用程序框架的默认控制结构将在 

特定的时间调用我们废弃的程序。应用程序的框架是“分离、改变和中止事件”的好例子,因为它总是努力 

去尝试集中在被废弃的所有特殊程序段。  

程序片利用应用程序框架来建立。我们从类中继承程序片,并且废弃特定的程序。大多数时间我们必须考虑 

一些不得不运行的使程序片在WEB 页面上建立和使用的重要方法。这些方法是:  

  

方法 作用  

  

init() 程序片第一次被创建,初次运行初始化程序片时调用  

start() 每当程序片进入Web 浏览器中,并且允许程序片启动它的常规操作时调用(特殊的程序片被 stop() 

关闭);同样在 init()后调用  

paint() 基础类 ponent 的一部分(继承结构中上溯三级)。作为update() 的一部分调用,以便对程序片 

的画布进行特殊的描绘  

stop() 每次程序片从 Web 浏览器的视线中离开时调用,使程序片能关闭代价高昂的操作;同样在调用 

destroy()前调用  

destroy() 程序片不再需要,将它从页面中卸载时调用,以执行资源的最后清除工作  

  

现在来看一看paint()方法。一旦 ponent (目前是程序片)决定自己需要更新,就会调用这个方法——可 

能是由于它再次回转屏幕,首次在屏幕上显示,或者是由于其他窗口临时覆盖了你的 Web 浏览器。此时程序 

片会调用它的update()方法(在基础类 ponent 中定义),该方法会恢复一切该恢复的东西,而调用 

paint()正是这个过程的一部分。没必要对 paint()进行过载处理,但构建一个简单的程序片无疑是方便的方 

法,所以我们首先从paint()方法开始。  

update()调用paint()时,会向其传递指向Graphics 对象的一个句柄,那个对象代表准备在上面描绘(作 

图)的表面。这是非常重要的,因为我们受到项目组件的外观的限制,因此不能画到区域外,这可是一件好 

事,否则我们就会画到线外去。在程序片的例子中,程序片的外观就是这界定的区域。  

图形对象同样有一系列我们可对其进行的操作。这些操作都与在画布上作图有关。所以其中的大部分都要涉 

及图像、几何菜状、圆弧等等的描绘(注意如果有兴趣,可在 Java 文档中找到更详细的说明)。有些方法允 

许我们画出字符,而其中最常用的就是drawString()。对于它,需指出自己想描绘的String (字串),并指 

定它在程序片作图区域的起点。这个位置用像素表示,所以它在不同的机器上看起来是不同的,但至少是可 

以移植的。  

根据这些信息即可创建一个简单的程序片:  



                                                                379 


…………………………………………………………Page 381……………………………………………………………

  

//: Applet1。java  

// Very simple applet  

package c13;  

import java。awt。*;  

import java。applet。*;  

  

public class Applet1 extends Applet {  

  public void paint(Graphics g) {  

    g。drawString(〃First applet〃; 10; 10);  

  }  

} ///:~  

  

注意这个程序片不需要有一个 main()。所有内容都封装到应用程序框架中;我们将所有启动代码都放在 

init()里。  

必须将这个程序放到一个Web 页中才能运行,而只能在支持 Java 的Web 浏览器中才能看到此页。为了将一个 

程序片置入 Web 页,需要在那个Web 页的代码中设置一个特殊的标记(注释①),以指示网页装载和运行程 

序片。这就是applet 标记,它在 Applet1 中的样子如下:  

  

  

  

  

①:本书假定读者已掌握了HTML 的基本知识。这些知识不难学习,有许多书籍和网上资源都可以提供帮助。  

  

其中,code 值指定了。class 文件的名字,程序片就驻留在那个文件中。width 和height 指定这个程序片的 

初始尺寸(如前所述,以像素为单位)。还可将另一些东西放入applet 标记:用于在因特网上寻找其 

他。class 文件的位置(codebase )、对齐和排列信息(align)、使程序片相互间能够通信的一个特殊标识 

符(name )以及用于提供程序片能接收的信息的参数。参数采取下述形式:  

  

可根据需要设置任意多个这样的参数。  

在简单的程序片中,我们要做的唯一事情是按上述形式在 Web 页中设置一个程序片标记(applet),令其装 

载和运行程序片。  



13。2。1 程序片的测试  



我们可在不必建立网络连接的前提下进行一次简单的测试,方法是启动我们的Web 浏览器,然后打开包含了 

程序片标签的HTML 文件(Sun 公司的 JDK 同样包括一个称为“程序片观察器”的工具,它能挑出html 文件 

的标记,并运行这个程序片,不必显示周围的HTML 文本——注释②)。html 文件载入后,浏览器 

会发现程序片的标签,并查找由code 值指定的。class 文件。当然,它会先在 CLASSPATH (类路径)中寻找, 

如果在CLASSPATH 下找不到类文件,就在 WEB 浏览器状态栏给出一个错误信息,告知不能找到。class 文件。  

  

②;由于程序片观察器会忽略除APPLET 标记之外的任何东西,所以可将那些标记作为注释置入Java 源码:  

//   

这样就可直接执行“appletviewer MyApplet。java”,不必再创建小的HTML 文件来完成测试。  

  

若想在Web 站点上试验,还会碰到另一些麻烦。首先,我们必须有一个Web 站点,这对大多数人来说都意味 

着位于远程地点的一家服务提供商(ISP)。然后必须通过某种途径将HTML 文件和。class 文件从自己的站点 

移至 ISP机器上正确的目录(WWW 目录)。这一般是通过采用“文件传输协议”(FTP)的程序来做成的,网 

上可找到许多这样的免费程序。所以我们要做的全部事情似乎就是用 FTP 协议将文件移至 ISP 的机器,然后 

用自己的浏览器连接网站和HTML 文件;假如程序片正确装载和执行,就表明大功告成。但真是这样吗?  



                                                                                    380 


…………………………………………………………Page 382……………………………………………………………

但这儿我们可能会受到愚弄。假如 Web 浏览器在服务器上找不到。class 文件,就会在你的本地机器上搜寻 

CLASSPATH。所以程序片或许根本不能从服务器上正确地装载,但在你看来却是一切正常的,因为浏览器在你 

的机器上找到了它需要的东西。但在其他人访问时,他们的浏览器就无法找到那些类文件。所以在测试时, 

必须确定已从自己的机器删除了相关的。class文件,以确保测试结果的真实。  

我自己就遇到过这样的一个问题。当时是将程序片置入一个 package (包)中。上载了HTML 文件和程序片 

后,由于包名的问题,程序片的服务器路径似乎陷入了混乱。但是,我的浏览器在本地类路径(CLASSPATH) 

中找到了它。这样一来,我就成了能够成功装载程序片的唯一一个人。后来我花了一些时间才发现原来是 

package 语句有误。一般地,应该将package 语句置于程序片的外部。  



13
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!