这么说也就是说刷新的时候,第一次启动的APPLET的很多的变量或者线程并没有完全给我清空?我写了一个stop()和destroy()方法,结果表明一刷新的时候,这两个方法都被调用了,里面的打印语句打印出来了,按理讲这个时候整个APPLET已经结束了它的生命周期了吧,可偏偏在那两个打印语句之后还有我的别的方法的打印语句,真是奇怪而且,可以明显的感觉的到,刷新的时第二次显示那个APPLET的速度要比第一次新开IE时要显示的快上好多倍的.另外,我的程序中,在init()方法,所有的变量都有初始化的,要么就是Vector v = null开始的,要么就是 Vector v = new Vector() 还有,我的不少变量,包括那些出问题的变量是static的,不知和这有没有关系.
还有,我的不少变量,包括那些出问题的变量是static的,不知和这有没有关系.
我感觉发现的问题越来越多了,越来越是自己不能想得通的了.
1、我自己重写了destroy()方法后,这个方法就是把一个另外的主线程之外的线程置空(这个线程是个后台扫描的,一直不会停的)。这样一来,与自己不重写destroy()这个方法,结果刷新后显示的是两个结果的。如果说destroy方法是全部清空APPLET里的各种变量的话,为何我不重写好象反而没有清空,导致我的结果不正确。(结果是在屏幕上多了一个绘图对象了),而我自己重写的destroy中,也没有清空别的任何变量对象的啊???2、在init()方法,调用了一个别的方法,例如A方法,A方法有三句打印语句,方法头一句,方法尾两句。然后中间执行的运算比较多。这时还没启动别的任何线程,按理讲,这三个打印语句应该一起打印出来啊,可偏偏运行的结果是:打印了第一句打印语句,程序就开始跑到执行start()方法了,打印了start方法中的打印语句了,再打印A方法中后两句打印语句了,为何执行的顺序变了???3、为何在执行完了我自己重写的destroy()方法后,还有我别的方法里的打印语句在控制台打印出来???不是执行destroy()时已经完全结束了APPLET了吗???4、我所有的一切运行结果如果是在新开IE时都是正常的,为何在刷新WEB页面再显示APPLET就不正常了,刷新的时候机器到底做了些什么?哪位高手能描述一下?刷新后,那些init()和start()都是照样执行了的啊,从我输出的打印语句可以看得出来的???可为何结果不正确了????郁闷的APPLET啊,本以为项目可以交了,谁知会出这种刷新出错的问题啊,交不了差了啊。
1、你说的init()在刷新时不执行,其实系统也还是执行了的,但是没等它完全执行完就跑到去执行start()了,奇怪啊?然后又回过头来继续把init()执行完.2、有关那个distroy()时,APPLET所发生的事谁能解释我听吗?为何已经调用了它,之后还会有调用我别的方法了?这也太奇怪了吧?还有,distroy()后,整个APPLET不是就完全结束了吗?那些变量即使是static的,也会被破坏的啊??想不通啊。
第二点:distroy()只有在用户离开或者关闭装载applet的页面时,才执行的。
开始我放到start()里初始化的是一些基本的变量,开始我以为可以了.后来又发现,我的APPLET中,还有几个Hashtable,也是静态的变量,如果我在start()里将其=null的话,那么它的大小是正确的,但结果不正确,如果不在start()里=null的话,那么每次Hashtable的大小都是前一个的两倍,但我程序运行的结果又正确,郁闷.
唉,我也不知怎么才能描述清楚.....
Applet本身也是一个对象呀,若你没有离开或者关闭装载applet的页面,那这个Applet对象就还在,他的属性当然也在呀。所以对于要变化的数据,你就只能放在start()方法中。应为每次刷新他会重新调用start()方法,所以你应该在start()方法的最开始对变量初始化(也就是赋值)。可能你所遇到的情况是每次都要设为null。但在其他的情况可能就不是了。你应该对Applet的机制在多看看,做多了就会好了。