试试声明的时候都给变量一个初始值,(如果还有问题)然后再试试在init()方法中初始化哪些变量

解决方案 »

  1.   

    因该是变量的初始化问题 start()方法里   初始化变量试试
      

  2.   

    这么说也就是说刷新的时候,第一次启动的APPLET的很多的变量或者线程并没有完全给我清空?我写了一个stop()和destroy()方法,结果表明一刷新的时候,这两个方法都被调用了,里面的打印语句打印出来了,按理讲这个时候整个APPLET已经结束了它的生命周期了吧,可偏偏在那两个打印语句之后还有我的别的方法的打印语句,真是奇怪而且,可以明显的感觉的到,刷新的时第二次显示那个APPLET的速度要比第一次新开IE时要显示的快上好多倍的.另外,我的程序中,在init()方法,所有的变量都有初始化的,要么就是Vector v = null开始的,要么就是 Vector v = new Vector()
    还有,我的不少变量,包括那些出问题的变量是static的,不知和这有没有关系.
      

  3.   

    自己开始还认为看了不少遍的APPLET的生命周期的从init()到destroy()的介绍,自认为对它的生命周期,执行顺序还比较清楚了。可现在我觉得我对APPLET的运行机制好象一无所知了一样了:
    我感觉发现的问题越来越多了,越来越是自己不能想得通的了.
    1、我自己重写了destroy()方法后,这个方法就是把一个另外的主线程之外的线程置空(这个线程是个后台扫描的,一直不会停的)。这样一来,与自己不重写destroy()这个方法,结果刷新后显示的是两个结果的。如果说destroy方法是全部清空APPLET里的各种变量的话,为何我不重写好象反而没有清空,导致我的结果不正确。(结果是在屏幕上多了一个绘图对象了),而我自己重写的destroy中,也没有清空别的任何变量对象的啊???2、在init()方法,调用了一个别的方法,例如A方法,A方法有三句打印语句,方法头一句,方法尾两句。然后中间执行的运算比较多。这时还没启动别的任何线程,按理讲,这三个打印语句应该一起打印出来啊,可偏偏运行的结果是:打印了第一句打印语句,程序就开始跑到执行start()方法了,打印了start方法中的打印语句了,再打印A方法中后两句打印语句了,为何执行的顺序变了???3、为何在执行完了我自己重写的destroy()方法后,还有我别的方法里的打印语句在控制台打印出来???不是执行destroy()时已经完全结束了APPLET了吗???4、我所有的一切运行结果如果是在新开IE时都是正常的,为何在刷新WEB页面再显示APPLET就不正常了,刷新的时候机器到底做了些什么?哪位高手能描述一下?刷新后,那些init()和start()都是照样执行了的啊,从我输出的打印语句可以看得出来的???可为何结果不正确了????郁闷的APPLET啊,本以为项目可以交了,谁知会出这种刷新出错的问题啊,交不了差了啊。
      

  4.   

    applet有个规则,就是在没有关闭装载applet的页面就刷新时,applet为了速度上的提高,不会重新初始化,直接就运行了。也就是说不会再去做init(),而是直接start()。但如果是新打开一个装载applet的页面,applet就会先做init(),再start()。
      

  5.   

    我建议你,对于不变的数据你可以放在init()中初始化,会变的放在start()中初始化。就应该没问题了,快去试试吧!
      

  6.   

    跟static有关,只要init了Applet而ie窗口没有关闭,就算在窗口中打开别的页面,static变量还是存在的,不会因为Applet重新初始化
      

  7.   

    确实如 qljsd(我本善良) 所说了,把那些变量放在了start()里面结果是正常了.可我还是迷惑啊.迷惑的是:
    1、你说的init()在刷新时不执行,其实系统也还是执行了的,但是没等它完全执行完就跑到去执行start()了,奇怪啊?然后又回过头来继续把init()执行完.2、有关那个distroy()时,APPLET所发生的事谁能解释我听吗?为何已经调用了它,之后还会有调用我别的方法了?这也太奇怪了吧?还有,distroy()后,整个APPLET不是就完全结束了吗?那些变量即使是static的,也会被破坏的啊??想不通啊。
      

  8.   

    第一点:我告诉你的规则绝对正确,肯定是你那儿写的有误。
    第二点:distroy()只有在用户离开或者关闭装载applet的页面时,才执行的。
      

  9.   

    郁闷,还有问题.
    开始我放到start()里初始化的是一些基本的变量,开始我以为可以了.后来又发现,我的APPLET中,还有几个Hashtable,也是静态的变量,如果我在start()里将其=null的话,那么它的大小是正确的,但结果不正确,如果不在start()里=null的话,那么每次Hashtable的大小都是前一个的两倍,但我程序运行的结果又正确,郁闷.
    唉,我也不知怎么才能描述清楚.....
      

  10.   

    TMD都是static惹的祸啊,在start()中将每个static变量赋一次空就好了,我开始漏了几个没赋
      

  11.   

    嗨,还没解决呢?
    Applet本身也是一个对象呀,若你没有离开或者关闭装载applet的页面,那这个Applet对象就还在,他的属性当然也在呀。所以对于要变化的数据,你就只能放在start()方法中。应为每次刷新他会重新调用start()方法,所以你应该在start()方法的最开始对变量初始化(也就是赋值)。可能你所遇到的情况是每次都要设为null。但在其他的情况可能就不是了。你应该对Applet的机制在多看看,做多了就会好了。
      

  12.   

    请问各位 jbx是什么文件格式.
      

  13.   

    感谢各位,问题终于全部解决好了,全都是static惹的祸,将那些static变量在start()中置一下null就行了.我开始没想到到刷新的时候APPLET对象并没有完全破坏掉,那些static变量都还保存着.我觉得还有一个奇怪的是:当我是从前一个WEB页面(A)中以链接的方式打开APPLET,这个时候,将APPLET的页面关闭,但打开它的那个A页面还不关闭,然后又从那个个链接打开APPLET,这个时候的效果和一个APPPLET的WEB页面刷新的效果是一样,我觉得有点怪了,按理讲它都已经关闭了整个页面了的啊?