MyEclipse6Jaa开发中文教程 然而,如果用这种浏览器打开的方式来调试 Applet,毕竟不方便,除了上一节讲过的 使用 Eclipse的菜单来运行外,还可以使用JDK的bin目录下的一个小程序: appletviewer.exe,用法很简单 appletviewer MyAppletRoot htm 就可以了!后面的HTML文件一定要包含 APPLET标签,这样调试比较方便,只看到模拟 的小程序查看器窗口,不显示网页内容。不过,如果 Applet和浏览器发生交互,例如执行 打开页面,调用 JavaScript这样的操作,就必须使用真实的浏览器进行测试 最后,有读者问到浏览 applet时没有java环境,则自动下载安装JRE,这该如何做到 呢?其实JDK已经帮我们考虑好了,同样有个程序叫 Htm/Converter. exe,然后在当前目录 下键入命令 Htm/Converter MyAppletRoot htn 稍后打开 MyAppletRoot. htm就可以看到其中的代码已经变成了最新的 object标签了 支持在线安装JRE的功能(当然前提是用户没装过JRE才会显示提示)。下面就是转换后 的代码清单 <IDOCTYPE HTML PUBLIC " -M3C//DTD HTML 4.01 Transitional/EN"> title>MyApplet Test</title> <-"CONVERTED APPLET"--> !- HTML CONVERTER-→> classid ="clsid: CAFEEFAC-0016-0000-0000-ABCDEFFEDCBA codebase http:/java.sun.com/update/1.6.0/jinstall-6-windows-i586.cab#version=6,0,0,105 WDTH="400"HE|GHT="300"> <PARAM NAME =CODE VALUE="applets. MyApplet class <PARAM NAME= CODEBASE VALUE="bin"> <param name="type"value ="application/x-java-applet; jpi-version=1.6> <param name="scriptable" value="false"> comments type="application/x-java-applet; jpi-version=1.6"1 CODE="applets. MyApplet class"\ A CODEBASE="bin"\ WDTH="400"1 HEIGHT="300 scriptable false pluginspage="http://java.sun.com/products/plugin/index.htm#download"> 刘长炯著
MyEclipse 6 Java 开发中文教程 11 刘长炯著 然而,如果用这种浏览器打开的方式来调试 Applet,毕竟不方便,除了上一节讲过的 使用 Eclipse 的菜单来运行外,还可以使用 JDK 的 bin 目录下的一个小程序: appletviewer.exe,用法很简单: appletviewer MyAppletRoot.html 就可以了!后面的 HTML 文件一定要包含 APPLET 标签,这样调试比较方便,只看到模拟 的小程序查看器窗口,不显示网页内容。不过,如果 Applet 和浏览器发生交互,例如执行 打开页面,调用 JavaScript 这样的操作,就必须使用真实的浏览器进行测试。 最后,有读者问到浏览 applet 时没有 java 环境,则自动下载安装 JRE,这该如何做到 呢?其实 JDK 已经帮我们考虑好了,同样有个程序叫 HtmlConverter.exe,然后在当前目录 下键入命令: HtmlConverter MyAppletRoot.html ,稍后打开 MyAppletRoot.html 就可以看到其中的代码已经变成了最新的 object 标签了, 支持在线安装 JRE 的功能(当然前提是用户没装过 JRE 才会显示提示)。下面就是转换后 的代码清单: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>MyApplet Test</title> </head> <body> <!--"CONVERTED_APPLET"--> <!-- HTML CONVERTER --> <object classid = "clsid:CAFEEFAC-0016-0000-0000-ABCDEFFEDCBA" codebase = "http://java.sun.com/update/1.6.0/jinstall-6-windows-i586.cab#Version=6,0,0,105" WIDTH = "400" HEIGHT = "300" > <PARAM NAME = CODE VALUE = "applets.MyApplet.class" > <PARAM NAME = CODEBASE VALUE = "bin" > <param name = "type" value = "application/x-java-applet;jpi-version=1.6"> <param name = "scriptable" value = "false"> <comment> <embed type = "application/x-java-applet;jpi-version=1.6" \ CODE = "applets.MyApplet.class" \ JAVA_CODEBASE = "bin" \ WIDTH = "400" \ HEIGHT = "300" scriptable = false pluginspage = "http://java.sun.com/products/plugin/index.html#download"> <noembed>
MyEclipse6Java开发中文教程 对不起,您的浏览器不支持 Applet! </noembed> </comment> <APPLET CODE =applets. MyApplet class" JAVA CODEBASE = bin"WIDTH=400 HE|GHT="300"> 对不起,您的浏览器不支持 Applet! APPLET> <I-"END CONVERTED APPLET"--> 如果读者希望定制 Applet标签转换为插件标签的更多信息,直接输入 Htm/Converter,就 可以看到批量转换和选项设置对话框如图18.5所示,具体用法,我想大家看图自明。需要 提醒大家的是,如果你想指定低版本的JRE起始值,最好是下载个低版本的JDK,然后运 行对应版本JDK的bn目录下的 HtmIConverter即可进行设置和转换了。 围Java(T)P1ug- in HIlL转换程序 文件伍编辑但帮助山 指定文件或目录路径 C:Uavalidk160_10bin 正在匹配文件名:”htm,"htm,”as5p □包含子文件夹(D 将文件备份到文件夹: C:avaldk1.6010bn.BAK HIiRh 模板文件: 用于 Windows和 Solaris的标硅组件〔和 Navigator)- 适用于小程序的Jaa版本 ○只使用JRE16.0_10(U 程序只便用该特定的JRE版本。若没有安装此版本,该版本将自动下载。否则,将重新指定用户进入手动下载页进行 载。关于自动下载过程和所有Java发行版的 End of Life(EC凵策略的详细信息,请参见 使用任问JRE1.6,或更高版本(S) 果没有安装这样的版本,如果可能,将自动下载当前JRE1.6系列的缺省下载版本,否则,用户将被重新引导到手工 下载页面 (1 图185 Java plug-in HTML转换程序界面 刘长炯著
MyEclipse 6 Java 开发中文教程 12 刘长炯著 对不起,您的浏览器不支持 Applet! </noembed> </embed> </comment> </object> <!-- <APPLET CODE = "applets.MyApplet.class" JAVA_CODEBASE = "bin" WIDTH = "400" HEIGHT = "300"> 对不起,您的浏览器不支持 Applet! </APPLET> --> <!--"END_CONVERTED_APPLET"--> </body> </html> 。如果读者希望定制 Applet 标签转换为插件标签的更多信息,直接输入 HtmlConverter,就 可以看到批量转换和选项设置对话框如图 18.5 所示,具体用法,我想大家看图自明。需要 提醒大家的是,如果你想指定低版本的 JRE 起始值,最好是下载个低版本的 JDK,然后运 行对应版本 JDK 的 bin 目录下的 HtmlConverter 即可进行设置和转换了。 图 18.5 Java Plug-in HTML 转换程序界面
MyEclipse6Java开发中文教程 1823 Applet的生命周期 Applet的生命周期和 Servlet差不多,只不过额外多了个停止和开始状态。咱们先来做 测试,新建类 applets. Life CycleApplet,代码清单如下 LifeCycleApplet. java package applets import java. text. DateFormat import java. text. simpleDateFormat import javax. swing.* public class LifeCycleApplet extends JApplet JTextArea textarea new JTextArea ( public LifeCycleApplet() t add(new JScrollPane(textarea))i private void addText(String text)I DateFormat df DateFormat getDate TimeInstance()i String msg df format(new java util. Date())+":"+ text +"\n" textarea append(msg)i System. out. print (msg)i public void init( addText( )"); public void start() addText("start (") public void stop()( addText("stop())i public void destroy()( addText("destroy()") 。在这个例子中,首先 Applet的父类也可以是 JApplet(除了 Applet和 JApplet,不可以是 刘长炯著
MyEclipse 6 Java 开发中文教程 13 刘长炯著 18.2.3 Applet 的生命周期 Applet 的生命周期和 Servlet 差不多,只不过额外多了个停止和开始状态。咱们先来做 测试,新建类 applets. LifeCycleApplet,代码清单如下: LifeCycleApplet.java package applets; import java.text.DateFormat; import java.text.SimpleDateFormat; import javax.swing.*; public class LifeCycleApplet extends JApplet { JTextArea textarea = new JTextArea(); public LifeCycleApplet() { add(new JScrollPane(textarea)); } private void addText(String text) { DateFormat df = DateFormat.getDateTimeInstance(); String msg = df.format(new java.util.Date()) + ":" + text + "\n"; textarea.append(msg); System.out.print(msg); } public void init() { addText("init()"); } public void start() { addText("start()"); } public void stop() { addText("stop()"); } public void destroy() { addText("destroy()"); } } 。在这个例子中,首先 Applet 的父类也可以是 JApplet(除了 Applet 和 JApplet,不可以是
MyEclipse6Jaa开发中文教程 其它的父类,否则无法加入浏览器运行),用来加入 Swing图形界面组件。然后我们使用了 个 JTextArea来显示多行文本,并把它加入到一个 JScrollPane中(滚动面板,专门提供 滚动条支持,这是 Swing的特殊设计),然后把它加入到 Applet的正中央(调用 add (Component)方法)。随后定义了一个 add Text(String text方法,来同时向文本区和控制 台打印信息。在这个方法中,首先适用日期格式化类( Date Format)将当前日期格式化成 便于阅读的形式后,和要添加的字符串合并到一起,然后分别添加到文本区和控制台中。随 后我们在四个和生命周期有关的方法中添加了相关的字符串。 接着在src目录下新建网页 LifeCycleApplet. htm来运行这个 Applet(最好在网页中测 试,这样出来的是真实效果),其代码清单如下 LifeCycleApplet. html <html> <body> <applet code=applets. Life CycleApplet class width= 200"height="200> 然后在浏览器中打开这个页面,可以看到显示的消息提示为 20085-713:52:16:int0 20085-713:52:16stat0 那么如何触发sp0和eoyo法呢?很简单,在地址栏输入另一个网站的地址,例如 ht/www.google.com,随后即可发现Java控制台窗门显示了相关的信息 20085-713:5408:stop0 20085-713:54:08: destroy0 。这说明 Applet己经被停止并销毁了。这样,关于生命周期的这四个方法的顺序,就非常 清楚了,执行顺序为:init0> start(0>stop0> destroy0。 再来看看JDK中文文档中对这四个方法的描述 public void inito 由浏览器或 applet viewer调用,通知此 applet它已经被加载到系统中。它经常在第一次 调用stat方法前被调用 如果 Applet的子类要执行初始化,则应该重写此方法。例如,使用线程的 applet将用ini 方法创建线程,用 estroy方法销毁它们 Applet类提供的此方法实现不执行任何操作 public void start 由浏览器或 applet viewer调用,通知此 applet它应该开始执行。它在init方法调用后以 及在Web页中每次重新访问 applet时调用 如果 Applet子类在包含它的Web页被访问时有想要执行的操作,则它应该重写此方法。 例如,带有动画的aplt可能想使用 start方法再次播放动画,使用stop方法挂起动画。 注:某些方法(如 getLocationonScreen)只有在如果 applet正在显示时,才能提供有意 义的结果。因为当 applet的 start方法第一次被调用时, is Showing返回 false,所以需 要 is Showing返回true的方法应该从 ComponentListener进行调用。 Applet类提供的此方法实现不执行任何操作。 public void stop 刘长炯著
MyEclipse 6 Java 开发中文教程 14 刘长炯著 其它的父类,否则无法加入浏览器运行),用来加入 Swing 图形界面组件。然后我们使用了 一个 JTextArea 来显示多行文本,并把它加入到一个 JScrollPane 中(滚动面板,专门提供 滚动条支持,这是 Swing 的特殊设计),然后把它加入到 Applet 的正中央(调用 add(Component)方法)。随后定义了一个 addText(String text)方法,来同时向文本区和控制 台打印信息。在这个方法中,首先适用日期格式化类(DateFormat)将当前日期格式化成 便于阅读的形式后,和要添加的字符串合并到一起,然后分别添加到文本区和控制台中。随 后我们在四个和生命周期有关的方法中添加了相关的字符串。 接着在 src 目录下新建网页 LifeCycleApplet.html 来运行这个 Applet(最好在网页中测 试,这样出来的是真实效果),其代码清单如下: LifeCycleApplet.html <html> <body> <applet code=applets.LifeCycleApplet.class width="200" height="200" > </applet> </body> </html> 。然后在浏览器中打开这个页面,可以看到显示的消息提示为: 2008-5-7 13:52:16:init() 2008-5-7 13:52:16:start() 。那么如何触发stop()和destory()方法呢?很简单,在地址栏输入另一个网站的地址,例如 http://www.google.com/ ,随后即可发现Java控制台窗口显示了相关的信息: 2008-5-7 13:54:08:stop() 2008-5-7 13:54:08:destroy() 。这说明 Applet 已经被停止并销毁了。这样,关于生命周期的这四个方法的顺序,就非常 清楚了,执行顺序为:init() > start() > stop() > destroy()。 再来看看 JDK 中文文档中对这四个方法的描述: public void init() 由浏览器或 applet viewer 调用,通知此 applet 它已经被加载到系统中。它经常在第一次 调用 start 方法前被调用。 如果 Applet 的子类要执行初始化,则应该重写此方法。例如,使用线程的 applet 将用 init 方法创建线程,用 destroy 方法销毁它们。 Applet 类提供的此方法实现不执行任何操作。 public void start() 由浏览器或 applet viewer 调用,通知此 applet 它应该开始执行。它在 init 方法调用后以 及在 Web 页中每次重新访问 applet 时调用。 如果 Applet 子类在包含它的 Web 页被访问时有想要执行的操作,则它应该重写此方法。 例如,带有动画的 applet 可能想使用 start 方法再次播放动画,使用 stop 方法挂起动画。 注:某些方法(如 getLocationOnScreen)只有在如果 applet 正在显示时,才能提供有意 义的结果。因为当 applet 的 start 方法第一次被调用时,isShowing 返回 false,所以需 要 isShowing 返回 true 的方法应该从 ComponentListener 进行调用。 Applet 类提供的此方法实现不执行任何操作。 public void stop()
MyEclipse6Jaa开发中文教程 由浏览器或 applet viewer调用,通知此 applet它应该终止执行。当包含此 applet的 Web页已经被其他页替换时,在 applet被销毁前调用此方法。 如果 Applet子类在包含它的Web页每次不可见时有想要执行的操作,则它应该重写此方 法。例如,带有动画的 applet可能想使用stat方法再次播放动画,使用stop方法挂起 动画。 Applet类提供的此方法实现不执行任何操作。 public void destroyo 由浏览器或 applet viewer调用,通知此 applet它正在被回收,它应该销毁分配给它的任 何资源。stop方法总是在 destroy之前被调用。 如果 Applet子类在被销毁前有想要执行的操作,则它应该重写此方法。例如,使用线程的 applet将用init方法来创建线程,用 destroy方法销毁它们 Applet类提供的此方法实现不执行任何操作 另外,在执行的次数上, inito只会被执行一次,而 destroyo则会在程序正常退出时被执 行一次,而 start和stop0则可能会被执行多次。一般把需要初始化的代码放在 inito方法中 而 Applet本身提供的大量方法(参考 Applet的自带说明文档)则只能在init0中或者之后才 能被调用,在构造器中是不能调用的,例如获取参数( getParameterO)或者获取图片,播放 音频文件等。 1824 Applet安全限制和签名 Applet 因为 Applet在浏览器中运行,所以,并不是什么操作都能做,例如不能读写创建文件, 不能任意连接网站等,总之就是不可威胁用户电脑的信息安全。下面我们来试试看,新建 个文件操作的 Applet,代码清单如下: applets. FileOperation Applet t package applets; import java applet Applet import java. awt. Label import java.io.* public/class FileoperationApplet extends Applet public void start()( try t leWriter out new FileWriter("c: \\test. txt") out, write("测试写入文件") add( new Labe1("文件写入成功")); 3 catch (IOException e)t // TODO Auto-generated catch block e printstackTrace()i add( new Label("文件写入失败")); 刘长炯著
MyEclipse 6 Java 开发中文教程 15 刘长炯著 由浏览器或 applet viewer 调用,通知此 applet 它应该终止执行。当包含此 applet 的 Web 页已经被其他页替换时,在 applet 被销毁前调用此方法。 如果 Applet 子类在包含它的 Web 页每次不可见时有想要执行的操作,则它应该重写此方 法。例如,带有动画的 applet 可能想使用 start 方法再次播放动画,使用 stop 方法挂起 动画。 Applet 类提供的此方法实现不执行任何操作。 public void destroy() 由浏览器或 applet viewer 调用,通知此 applet 它正在被回收,它应该销毁分配给它的任 何资源。stop 方法总是在 destroy 之前被调用。 如果 Applet 子类在被销毁前有想要执行的操作,则它应该重写此方法。例如,使用线程的 applet 将用 init 方法来创建线程,用 destroy 方法销毁它们。 Applet 类提供的此方法实现不执行任何操作。 。另外,在执行的次数上,init()只会被执行一次,而 destroy()则会在程序正常退出时被执 行一次,而 start()和 stop()则可能会被执行多次。一般把需要初始化的代码放在 init()方法中, 而 Applet 本身提供的大量方法(参考 Applet 的自带说明文档)则只能在 init()中或者之后才 能被调用,在构造器中是不能调用的,例如获取参数(getParameter())或者获取图片,播放 音频文件等。 18.2.4 Applet 安全限制和签名 Applet 因为 Applet 在浏览器中运行,所以,并不是什么操作都能做,例如不能读写创建文件, 不能任意连接网站等等,总之就是不可威胁用户电脑的信息安全。下面我们来试试看,新建 一个文件操作的 Applet,代码清单如下: applets.FileOperationApplet package applets; import java.applet.Applet; import java.awt.Label; import java.io.*; public class FileOperationApplet extends Applet { public void start() { try { FileWriter out = new FileWriter("c:\\test.txt"); out.write("测试写入文件"); out.close(); add(new Label("文件写入成功")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); add(new Label("文件写入失败")); }