|
|
前不久,我为呢一个不大不小的问题困惑不已。因为业务的需要,我必需要在网页中制作一个Applet来显示动态数据。显示这个Applet问题如此简单,对于我来说。因为我自信不过就是将Swing的东西搬到一个Class中,继承一个JApplet而已。我经过一段短暂的思想斗争后,开始马不停踢的Code了。 整个Code代码,我只用了一个上午的时间都搞定了,其实这主要是业务上数据处理的复杂并要求解析,所以导致时间过多,我想也许我会更快的。:) 在我的IE上能正常显示Applet,我兴奋不已,短暂的胜利使我丧失了程序员应有的职业操守,我把Applet打成jar包,然后加入项目中,在其他项目成员中运行都非常理想。我认为这个问题已经告一段落了,我开始其他的工作。 但是等待我的恶梦才看看开始,我们完成整个项目后,移交给测试组,测试组的Applet根本不能显示。"Why,Why,Why"这个问题我一直纳闷,至到测试组告诉我他们在没有JRE的环境中不能出来时,我才意思到问题出才那儿?我在JDK的Demo中找到文件jfc/SwingSet2的例子,在我的JSP 文件中加入类似如下代码:
- <!--"CONVERTED_APPLET"-->
- <!-- CONVERTER VERSION 1.3 -->
- <OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
- WIDTH = 695 HEIGHT = 525
- codebase="http://java.sun.com/products/plugin/1.3/jinstall-13-win32.cab#Version=1,3,0,0">
- <PARAM NAME = CODE VALUE = SwingSet2Applet >
- <PARAM NAME = CODEBASE VALUE = "." >
- <PARAM NAME = ARCHIVE VALUE = "SwingSet2.jar" >
-
- <PARAM NAME="type" VALUE="application/x-java-applet;version=1.3">
- <PARAM NAME="scriptable" VALUE="false">
- <COMMENT>
- <EMBED type="application/x-java-applet;version=1.3"
- CODE = SwingSet2Applet CODEBASE = "."
- ARCHIVE = "SwingSet2.jar"
- WIDTH = 695 HEIGHT = 525
- scriptable=false
- pluginspage="http://java.sun.com/products/plugin/1.3/plugin-install.html">
- <NOEMBED>
- </COMMENT>
-
- </NOEMBED></EMBED>
- </OBJECT>
如果这样,使用我们的网站的PC不能上网(由于我们的网站主要是企业级应用的)那不是不能正常下载JRE了吗,于是我将Sun公司的jinstall-13-win32.cab拷贝到我们的J2EE服务器上,供客户端下载。 这个问题虽然解决了,但是测试组的全体人员给了这个问题解决方案的否定,她们的理由是其他网站的Applet都没有要求下载,为啥我们这个Applet要求下载安装JRE呢?我给他们解释AWT和Swing的关系,还搬出了Sun和Microsoft的合作故事,虽然他们忍气吞声的接受了我的方案,不过我自己却不能说服我自己了。 我开始重新审阅我的代码,我发现其实我没有必要使用Swing的知识,我完全可以使用AWT的知识。于是我全部换成了AWT的东东。这个时间我只用了一个小时就完成了。 然后我在我的系统装了一个双系统,另一个系统不装任何java运行环境。 我进行测试发现我jar文件的第一个class不能找到显示Class ** not found,我在网上查资料,资料上显示"出现这个问题,请检查jar文件是否放到html的同一个目录" 我试了还是不行,最后,我做了一个试验,我将jdk的Demo关于Applet的java文件重新打成jar包,发现Sun的就可以。 然后我想是不是在我的处理上有用到windows jvm不支持的class呢?于是我在sun的例子中重新修改其代码,然后编译之,打成jar包,发现还是不行。 我有点欣慰,我认为我解决了我的问题,(其实我的理解不对,后来证实我的解答是错误的)。然后我在Google上搜索英文的资料,终于让我找到其理想的解决方案,但是这个解决方案和我想想的根本不是一会事。 方案中说如果Applet不能正常显示请试试编译时,在javac中带参数-target 1.1,这个解决方案是我眼睛一亮。 我明白了为啥windows jvm不能找到我的class了,因为我的编译使用jdk1.3,而运行环境是1.1,这样也许编译后的class有所不同(怀疑可能1.3中的class api已经更改过,或者优化过),这样导致了1.1的JVM根本不能借读1.3或者更高版本编译的class。 最后我在我的build.xml(Ant工具使用的必备文件)Javac节点加入 我的恶梦终于结束了。 真希望我们的恶梦能也越来越少,神啦,救救我们吧,阿门。 |
|