|
最近写一个applet的通讯程序,翻来覆去,学到不少做人的道理.7年前我就写applet,那时候用vj++.当时公司的PM确实是思想前卫,要把串口采集的数据通过IE采集,然后传到服务器上去,这段程序在appletviewer下没有问题,但是在IE下却不能运行.PM骂我们是白痴.后来发现我确实是白痴,因为只有白痴犯两次同样的错误.后来写一段验证本地用户信息的例子,也使用applet,发现appletviewer中是好的,IE确实不能运行,找了n多高手也没有解决.n年后,看sun的文档,才明白了一个词,"sandbox",applet只能运行在IE的沙箱中,解决的办法也有,给他一个证书就ok了.可怜那年十一,我写了一个activex,完成了类似的功能. 本来这次的工作也不复杂,但是因为不让用户从sun网站下载jre,必须使用jdk1.1,只能使用臭名昭著的AWT.applet技术本身已经过时,AWT已经推出历史舞台.]有价值的文档很难找到,主要是早期sun的jdk文档写的很简单,错误百出.写起程序来,费劲不少.后来发现jdk的版本居然也有问题.jdk1.4编译的javaclass,不能由MSJVM加载,这个可以原谅的,因为java2作了很多java语言规范的修正.仔细看了看javac的编译条件,可以编译为为java 1.1的类.必须使用参数-target 1.1,但是这个在1.4下不行,还得指定一个参数-source 1.3.-source 1.4只能编译出1.4的类.编译成功后,新的问题出现,class not found.高手说使用htmlconver可以解决这个问题,当时晕倒,用Sun提供的html converter将待发布网页自动转化成plug-in所能起作用的带有<OBJECT>和<EMBED>标签的网页,并自动下载sun的jre用的.经过一段研究后,发现的问题有两种,
一是基本没有装MSJVM.这个说来话长了,sun制定规范,各公司可以推出自己的JAVA实现,当然都得遵守Sun的规范。JAVA技术发展的开始阶段,MS和Sun保持了很好的合作关系,在IE里面采用MS的JAVA VM(虚拟机)支持Java applet,但好景不长,双方分手了,最新的IE支持的JAVA版本是1.1.4。由于sun的法律纠缠,不给微软新版Java技术的授权,当时幸存的非sun的jdk只有IBM的JDK.不过IBM只提供1.3.1 for windows的,JDK1.4.2的有,但是for linux,而且没有实现java.nio.最有甚者,连相同jdk版本的加密算法,都不同.不信你找一个相同jdk版本的websphere和weblogic,SSL通信基本不会成功.另外一个就是java源码事件,java很早就开源了,但是那时solaris上面的,不信你装solaris7试一下.由于sun的soalris for x86和freebsd存在竞争.sun不提供bsd版本的jdk1.4,这可辛苦了国外的高手,把solaris改为bsd的,我也是很辛苦的,每次装bsd,先划出2G空间,花上半天时间编译JDK.更为无耻的是jdk for windows的源码当时不是任何人都成下载的,必须加入java develop connection,然后下载,大陆人注册不行,台湾的可以,后来一位台湾的仁兄给我注册一个账号,我下载到jdk 源码,当时使用vc编译了一个下午,看了看,java的c实现,代码质量确实不敢恭维.当时我估计java 如果要很好的发展,以后要开源的,后来在IBM的要求下,sun终于将java开源.后来微软和sun终于和解了,在Sun MicroSystems公司的干涉下,微软已经宣布未来的产品将不再集成微软Java虚拟机(Microsoft JVM),并在2007年12月31日彻底停止对现有MSJVM的支持。这就造成Window98、Windows NT4.0、Windows2000、都已经内置了微软的Java虚拟机,XP和2003 server的某些版本,没有MSJVM支持了.
二就是IE6 for XP里面有internet选项中有MSJVM的设置,启用即可.说句题外话,微软在推出VJ6之前,曾有公司对其内部测试版生成的Windows程序的执行效率和其他编程语言产生的Windows程序进行了对比测试,结果吃惊的发现VJ产生的代码的效率竟然超过了C++代码产生的Windows程序的执行效率。创建了Turbo Pascal的天才 Anders Hejlsberg,他对编译器的优化功力世所罕见,再者根据jdk的c代码,java分配内存的速度远高于c,从WFC 不愧为 .NET Framework的始祖。 |