Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14490756
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:37:48

下载本文示例代码
  从上一篇看到的JAR的基本用法,似乎并没让人有感觉到JAR的出现是给applet的应用带来了一个新的开始。但您也许看完了下面的,就会对JAR稍有认同了。  很多试着在jbuilder里做过applet的java爱好者都知道,applet的界面布局是一个比较繁人的问题,远不是如VB里面把控件放到界面上那么简单,就算是用最"高级"的grid bag布局管理器,要在上面摆多个控件也是需要调整又调整的,而且就算是在jbuilder里面还看得可以接受,但换到浏览器里面也许又是另一个样子了,当然也有摆得好的,当毕竟是需要时间和经验的,可是在jbuilder里面如果对底板不选grid bag布局管理器,而选XY布局,那在上面摆控件就真的是一件很轻松的事情了,令人遗憾的是XY布局所调用的类是com.borland.jbcl.layout下面的,是由borland公司自己编写的,很显然这样编写的applet是轻松了编写,痛苦了应用,因为实在是无法让仅仅认得jdk1.0的IE去认识borland写的类,那么就真的只有写给自己看了吗,现在有了JAR,你会发现如按下面的步骤来,是可以很轻松的让别人也看到你写的包含非jdk标准类的applet。  我们在第一步写的那界面上再添加几个按钮,先把底板的布局由grid bag改变成xy,再在上面添加几个按钮,把按钮的右击事件也设置为弹出菜单,以下是源程序,在jbuilder生成的代码上简化一下,去掉暂可不用的代码和一些注释,但保证可以正常运行, package test1; import java.awt.*;import java.awt.event.*;import java.applet.*;import com.borland.jbcl.layout.*;public class Applet1 extends Applet {boolean isStandalone = false;PopupMenu popupMenu1 = new PopupMenu();MenuItem menuItem1 = new MenuItem();MenuItem menuItem2 = new MenuItem();MenuItem menuItem3 = new MenuItem();Button button1 = new Button();XYLayout xYLayout1 = new XYLayout();/*面板改变为XYLayout布局,使用的是非jdk标准类*/Button button2 = new Button();Button button3 = new Button();/*添加三个按钮*/public void init() {menuItem1.setLabel("1");menuItem2.setLabel("2");menuItem3.setLabel("3");button1.setLabel("button1");button1.addMouseListener(new java.awt.event.MouseAdapter() {public void mousePressed(MouseEvent e) {button1_mousePressed(e);}});this.setLayout(xYLayout1);button2.setLabel("button2");button2.addMouseListener(new java.awt.event.MouseAdapter() {public void mousePressed(MouseEvent e) {button1_mousePressed(e);}});button3.setLabel("button3");button3.addMouseListener(new java.awt.event.MouseAdapter() {/*三个按钮的右键事件都为一个*/public void mousePressed(MouseEvent e) {button1_mousePressed(e);}});popupMenu1.add(menuItem1);popupMenu1.add(menuItem2);popupMenu1.add(menuItem3);this.add(button1, new XYConstraints(155, 5, -1, -1));add(popupMenu1);this.add(button2, new XYConstraints(49, 94, 101, 32));this.add(button3, new XYConstraints(235, 92, 98, 36));}void button1_mousePressed(MouseEvent e) {int mods=e.getModifiers();if((mods&InputEvent.BUTTON3_MASK)!=0){popupMenu1.show(button1,e.getX(),e.getY());}}}  通过在jbuilder的预览中可以看到,三个按钮未改动位置,而且右键单击也按要求在一个按钮上出现。很可惜的是这样的applet无法发布出来,我们试着打开class目录下的Applet1.html,IE报出一个出错信息:"load:test1.Applet1 cant't be instantiated"。原因就是IE并不认识com.borland.jbcl.layout下面的类,而这里使用了XYLayout。.那么我们开始制作包含该XYLayout类的JAR来发布该applet。  还是通过new一个 Archive Builder开始,  Archive type : Applet  Project classes and resources : Include required classes and known resources  Required classes and resources : add test1.Applet1.class  再点击next,就到了关键的一步,显示的JBCL和DataExpress都是applet所需要调用到的类,而且都是非jdk标准的,可以通过在这里选择后也包含到这个JAR文件中,供applet调用,默认的设定是Include required classes and all resources,即把applet所需要调用的类包含到JAR中,并且还包括这个类所中所包含的所有资源,而不管applet是否会用到。所以我们一般情况下只需要选择include required classes and known resources,资源文件要尽量少的包含到JAR中,以避免JAR文件过于庞大。记住是要让JBCL和DataExpress都选择为Include Deps。这样便很轻松的完成了相关类的添加工作。  完成后可以在test1.jpr的目录数下找到Applet,builder它得到的test1.jar目录数中可以看到多出了com.borland.jbcl.layout这样的目录,在这个目录下包含着XYLayout.class和XYConstraints.class两个类文件,这就是这个applet所需要调用的非标准类了,还是要记住,每当重新编译了这个applet,都要再编译一次JAR,这样才能让新生成的applet文件包含到JAR中。  接下来就只需要在有test1.jar这个文件的目录里面新建一个文件testjar.html :  <applet code=test1.Applet1.class archive="test1.jar" width=350 height=200 > </applet>  需要提醒的是,如果在IE里面浏览该html,如果有过重新编译JAR并要把变化反应到网页上来,又没有关闭先前开的浏览该html的IE窗口,就要在地址栏里面按Ctrl F5来刷新该html。  可以看到这样的应用真的给applet赋予了更强大的生命力,而且在jbuilder里面很容易的就实现了它。但是就applet的应用来讲,还是有个悬而未决的问题,很多朋友都知道,在applet里面不能添加进swing类,因为IE只是支持jdk1.0,而swing类是以 jdk1.1 轻型用户界面框架为基础的,不在IE的支持范围,那么自然也不能正常显示,现在问题是也不能用Jbuilder的Archive Builder来把applet所需要调用的swing类包含到JAR中。  但也不是没有办法,一个较为简单的办法是装jre(Java Runtime Environment ),但是这个办法的缺点是要让每一个要浏览该applet的机器都要安装jre。另一个办法是重新复制编译一次swing类,生成自己的类,这样就可以被JAR打包时所包含到了,当然这需要的较多的时间和精力,这里举一个较为简单的例子,如果在applet里使用Jbutton,那么先把jdk里面一个src.jar这个文件解压,再在目录javax,swing下,找到Jbutton.java文件,查看它的源码,并把所有涉及到的swing类都复制到一个目录下,改变每一个文件的package属性。再编译,通过了就说明找到的文件全了,没有通过就必须再找到,直到不再编译出错为止。最后从applet引用这个已经编译的class,而不再用swing。好像这个办法是笨了点,但对大家熟悉java是很有帮助的。  差不多JAR的用法可以说掌握到这样就可以了,当然还有更精彩的应用,如与数字签名结合可以突破以往对applet的限制,甚至可以访问本地硬盘,网络等等。如果大家对此感兴趣,我也会在稍后的文章中对数字签名和JAR的结合跟大家作一个较为详尽的探讨。   从上一篇看到的JAR的基本用法,似乎并没让人有感觉到JAR的出现是给applet的应用带来了一个新的开始。但您也许看完了下面的,就会对JAR稍有认同了。  很多试着在jbuilder里做过applet的java爱好者都知道,applet的界面布局是一个比较繁人的问题,远不是如VB里面把控件放到界面上那么简单,就算是用最"高级"的grid bag布局管理器,要在上面摆多个控件也是需要调整又调整的,而且就算是在jbuilder里面还看得可以接受,但换到浏览器里面也许又是另一个样子了,当然也有摆得好的,当毕竟是需要时间和经验的,可是在jbuilder里面如果对底板不选grid bag布局管理器,而选XY布局,那在上面摆控件就真的是一件很轻松的事情了,令人遗憾的是XY布局所调用的类是com.borland.jbcl.layout下面的,是由borland公司自己编写的,很显然这样编写的applet是轻松了编写,痛苦了应用,因为实在是无法让仅仅认得jdk1.0的IE去认识borland写的类,那么就真的只有写给自己看了吗,现在有了JAR,你会发现如按下面的步骤来,是可以很轻松的让别人也看到你写的包含非jdk标准类的applet。  我们在第一步写的那界面上再添加几个按钮,先把底板的布局由grid bag改变成xy,再在上面添加几个按钮,把按钮的右击事件也设置为弹出菜单,以下是源程序,在jbuilder生成的代码上简化一下,去掉暂可不用的代码和一些注释,但保证可以正常运行, package test1; import java.awt.*;import java.awt.event.*;import java.applet.*;import com.borland.jbcl.layout.*;public class Applet1 extends Applet {boolean isStandalone = false;PopupMenu popupMenu1 = new PopupMenu();MenuItem menuItem1 = new MenuItem();MenuItem menuItem2 = new MenuItem();MenuItem menuItem3 = new MenuItem();Button button1 = new Button();XYLayout xYLayout1 = new XYLayout();/*面板改变为XYLayout布局,使用的是非jdk标准类*/Button button2 = new Button();Button button3 = new Button();/*添加三个按钮*/public void init() {menuItem1.setLabel("1");menuItem2.setLabel("2");menuItem3.setLabel("3");button1.setLabel("button1");button1.addMouseListener(new java.awt.event.MouseAdapter() {public void mousePressed(MouseEvent e) {button1_mousePressed(e);}});this.setLayout(xYLayout1);button2.setLabel("button2");button2.addMouseListener(new java.awt.event.MouseAdapter() {public void mousePressed(MouseEvent e) {button1_mousePressed(e);}});button3.setLabel("button3");button3.addMouseListener(new java.awt.event.MouseAdapter() {/*三个按钮的右键事件都为一个*/public void mousePressed(MouseEvent e) {button1_mousePressed(e);}});popupMenu1.add(menuItem1);popupMenu1.add(menuItem2);popupMenu1.add(menuItem3);this.add(button1, new XYConstraints(155, 5, -1, -1));add(popupMenu1);this.add(button2, new XYConstraints(49, 94, 101, 32));this.add(button3, new XYConstraints(235, 92, 98, 36));}void button1_mousePressed(MouseEvent e) {int mods=e.getModifiers();if((mods&InputEvent.BUTTON3_MASK)!=0){popupMenu1.show(button1,e.getX(),e.getY());}}}  通过在jbuilder的预览中可以看到,三个按钮未改动位置,而且右键单击也按要求在一个按钮上出现。很可惜的是这样的applet无法发布出来,我们试着打开class目录下的Applet1.html,IE报出一个出错信息:"load:test1.Applet1 cant't be instantiated"。原因就是IE并不认识com.borland.jbcl.layout下面的类,而这里使用了XYLayout。.那么我们开始制作包含该XYLayout类的JAR来发布该applet。  还是通过new一个 Archive Builder开始,  Archive type : Applet  Project classes and resources : Include required classes and known resources  Required classes and resources : add test1.Applet1.class  再点击next,就到了关键的一步,显示的JBCL和DataExpress都是applet所需要调用到的类,而且都是非jdk标准的,可以通过在这里选择后也包含到这个JAR文件中,供applet调用,默认的设定是Include required classes and all resources,即把applet所需要调用的类包含到JAR中,并且还包括这个类所中所包含的所有资源,而不管applet是否会用到。所以我们一般情况下只需要选择include required classes and known resources,资源文件要尽量少的包含到JAR中,以避免JAR文件过于庞大。记住是要让JBCL和DataExpress都选择为Include Deps。这样便很轻松的完成了相关类的添加工作。  完成后可以在test1.jpr的目录数下找到Applet,builder它得到的test1.jar目录数中可以看到多出了com.borland.jbcl.layout这样的目录,在这个目录下包含着XYLayout.class和XYConstraints.class两个类文件,这就是这个applet所需要调用的非标准类了,还是要记住,每当重新编译了这个applet,都要再编译一次JAR,这样才能让新生成的applet文件包含到JAR中。  接下来就只需要在有test1.jar这个文件的目录里面新建一个文件testjar.html :  <applet code=test1.Applet1.class archive="test1.jar" width=350 height=200 > </applet>  需要提醒的是,如果在IE里面浏览该html,如果有过重新编译JAR并要把变化反应到网页上来,又没有关闭先前开的浏览该html的IE窗口,就要在地址栏里面按Ctrl F5来刷新该html。  可以看到这样的应用真的给applet赋予了更强大的生命力,而且在jbuilder里面很容易的就实现了它。但是就applet的应用来讲,还是有个悬而未决的问题,很多朋友都知道,在applet里面不能添加进swing类,因为IE只是支持jdk1.0,而swing类是以 jdk1.1 轻型用户界面框架为基础的,不在IE的支持范围,那么自然也不能正常显示,现在问题是也不能用Jbuilder的Archive Builder来把applet所需要调用的swing类包含到JAR中。  但也不是没有办法,一个较为简单的办法是装jre(Java Runtime Environment ),但是这个办法的缺点是要让每一个要浏览该applet的机器都要安装jre。另一个办法是重新复制编译一次swing类,生成自己的类,这样就可以被JAR打包时所包含到了,当然这需要的较多的时间和精力,这里举一个较为简单的例子,如果在applet里使用Jbutton,那么先把jdk里面一个src.jar这个文件解压,再在目录javax,swing下,找到Jbutton.java文件,查看它的源码,并把所有涉及到的swing类都复制到一个目录下,改变每一个文件的package属性。再编译,通过了就说明找到的文件全了,没有通过就必须再找到,直到不再编译出错为止。最后从applet引用这个已经编译的class,而不再用swing。好像这个办法是笨了点,但对大家熟悉java是很有帮助的。  差不多JAR的用法可以说掌握到这样就可以了,当然还有更精彩的应用,如与数字签名结合可以突破以往对applet的限制,甚至可以访问本地硬盘,网络等等。如果大家对此感兴趣,我也会在稍后的文章中对数字签名和JAR的结合跟大家作一个较为详尽的探讨。 下载本文示例代码


JAR进阶(下)JAR进阶(下)JAR进阶(下)JAR进阶(下)JAR进阶(下)JAR进阶(下)JAR进阶(下)JAR进阶(下)JAR进阶(下)JAR进阶(下)JAR进阶(下)JAR进阶(下)JAR进阶(下)JAR进阶(下)JAR进阶(下)
阅读(208) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~