开发Applet的一些感受-定位applet,调试applet
1、applet本身有限制:不能读写本地文件系统、不能和第三方进行任何通信,除了提供该applet下载的服务器本身
2、applet写好之后,不能使用applet标签来发布在html里,必须使用sun的HtmlConverter工具来将applet标签转换成为object标签方可,这一点看上一篇帖子
3、 applet调试过程中,善用java控制台。java控制台是一个非常有用的终端,可以用来调试applet。当发现applet的class怎么也 not found的时候,打开控制台,输入l(小写的L)命令,就可以打印出当前jre搜索applet的路径,你就会发现jre到底找到什么地方去了。此外,当applet的jar或class文件更改后,可以在控制台中输入x命令,来清除原来的cache,然后再重新加载applet。此外,控制台的c(清楚屏幕)、v、t等也是常用命令,可以尝试使用。
4、由于struts本身的一些原因,我们在jsp里面加载applet时会碰到一些问题,特别是对于不同的浏览器也会有不同的问题。这些问题其实都是一点--浏览器能不能找到applet类。在struts中,一个动作触发一个 action,一个action通常处理完成后都会转到一个jsp,这就会出现路径不一致的问题。如一个action发生后,页面来到了 /easycluster/jsp/cpuusage.jsp,但此时浏览器的地址栏中是http://server:port:/easycluster/CpuUsage.ec......,两个路径不一样,就会出现applet找不到的问题。解决方法是:(1)在jsp页面里面要写<html:base/>标签(2)在IE里面,他找寻applet的codebase是http://server:port/easycluster,所以,我们的ARCHIVE要写成jsp/cpuusageapplet.jar;但是在Firefox里面,他找寻的codebase是http://server:port/easycluster/jsp,所以,JSP里面的ARCHIVE要写成cpuusageapplet.jar,所以,我们要写一段javascript来判断浏览器的种类,然后分别对待
2、applet写好之后,不能使用applet标签来发布在html里,必须使用sun的HtmlConverter工具来将applet标签转换成为object标签方可,这一点看上一篇帖子
3、 applet调试过程中,善用java控制台。java控制台是一个非常有用的终端,可以用来调试applet。当发现applet的class怎么也 not found的时候,打开控制台,输入l(小写的L)命令,就可以打印出当前jre搜索applet的路径,你就会发现jre到底找到什么地方去了。此外,当applet的jar或class文件更改后,可以在控制台中输入x命令,来清除原来的cache,然后再重新加载applet。此外,控制台的c(清楚屏幕)、v、t等也是常用命令,可以尝试使用。
4、由于struts本身的一些原因,我们在jsp里面加载applet时会碰到一些问题,特别是对于不同的浏览器也会有不同的问题。这些问题其实都是一点--浏览器能不能找到applet类。在struts中,一个动作触发一个 action,一个action通常处理完成后都会转到一个jsp,这就会出现路径不一致的问题。如一个action发生后,页面来到了 /easycluster/jsp/cpuusage.jsp,但此时浏览器的地址栏中是http://server:port:/easycluster/CpuUsage.ec......,两个路径不一样,就会出现applet找不到的问题。解决方法是:(1)在jsp页面里面要写<html:base/>标签(2)在IE里面,他找寻applet的codebase是http://server:port/easycluster,所以,我们的ARCHIVE要写成jsp/cpuusageapplet.jar;但是在Firefox里面,他找寻的codebase是http://server:port/easycluster/jsp,所以,JSP里面的ARCHIVE要写成cpuusageapplet.jar,所以,我们要写一段javascript来判断浏览器的种类,然后分别对待
5、Applet的重绘问题。Applet重绘时,会先调用update方法将屏幕清除,然后调用paint方法进行重绘。由于有一个清除屏幕的过程,所以会有闪烁的现象发生。一般情况下,我们可以重载update函数,这样,就不会有清除屏幕的过程,可以在一定程度上避免闪烁。但是记得最后要手动调 super.paint(g),这样完成界面的重绘,否则applet出来之后就没有画面了。另外,对于一个静止不动的applet来说,我们也建议开一个线程来定时刷新/重绘画面,因为我们的applet一般是在一个HTML中,当HTML发生上下或左右滚动时,会覆盖applet的画面,如果没有定时重绘画面的这种机制,就会导致applet被覆盖之后无法恢复!