★关于applet中的start和stop两个方法的“调用时机”问题★

cywater2000 2003-11-04 09:37:28
最近刚开始学习applet.
但是在实习的时候发现了一个问题:
就是关于start和stop两个方法的“调用时机”问题:

资料上说:

启动方法start():
系统在调用完init()方法之后将自动调用start()方法,此后每当返回Applet所在的
主页或是恢复浏览器窗口时系统都将调用一次start()方法。该方法中包含Applet的主体内容。”
“停止方法stop():
每当离开Applet所在的主页或是图标化浏览器窗口时系统都将调用一次stop()方法。
显然start()方法与stop()方法都可以被多次调用,并且两种方法是穿插调用的,每一次对stop()方法的调用都是在一次对start()方法的调用之后。”

于是我就写了个程序试试,但是与书上说的不一样?
代码如下:
import java.awt.Graphics;
import java.applet.Applet;

public class HelloWorldlet extends Applet
{
String strText;
int i_start;
int i_stop;
int i_paint;

public void init()
{
strText = "Hello Apllet World!";
i_start = 0;
i_stop = 0;
i_paint = 0;
}

public void start()
{
i_start++;
}

public void stop()
{
i_stop++;
}

public void paint(Graphics g)
{
i_paint++;

String strOut = strText;
g.drawString(strOut,25,20);

strOut = "The time(s) of start is(are) " + i_start;
g.drawString(strOut,25,35);

strOut = "The time(s) of start is(are) " + i_stop;
g.drawString(strOut,25,50);

strOut = "The time(s) of start is(are) " + i_paint;
g.drawString(strOut,25,65);
}
}

运行的效果是:无论我是第一次加载页面,还是离开页面再回来或者还是窗口最小化后再还原start总计只执行一次?stop一次也不执行?为什么啊?
(即显示效果是:i_start is 1,i_stop is 0)

是不是我对“离开Applet所在的主页”这句话理解不对?
于是我去查JAVA帮助手册,说的也是这个意思
(关于start:It is called after the init method and each time the applet is revisited in a Web page.
关于stop:It is called when the Web page that contains this applet has been replaced by another page, and also just before the applet is to be destroyed. )

为什么实际与资料上的不一样呢?

希望大家帮助!多谢了!
...全文
160 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
dlxu 2004-01-02
  • 打赏
  • 举报
回复
是不是只要没离开页面,STOP方法都不会被调用啊
Acylas 2004-01-02
  • 打赏
  • 举报
回复
你不要那样试,你直接在start和stop方法里面System.out.println("adfadf");看看打印对不对就知道了。stop方法是退出ie、改变链接地址、最小化IE等时都会触发的,start方法跟它相反。
而destory是退出ie或者改变链接地址是触发的
HelpUP 2004-01-02
  • 打赏
  • 举报
回复
UP
cywater2000 2003-11-16
  • 打赏
  • 举报
回复
UP!
cywater2000 2003-11-15
  • 打赏
  • 举报
回复
wait
cywater2000 2003-11-14
  • 打赏
  • 举报
回复
最近我又做了个实验,就是在start中加了一个播放audio的loop

然后在stop中停止它

但是当我最小化窗口时,音乐还是在播放,

所以看来,至少在IE中,实际效果和文档中的不一样。

HelpUP 2003-11-11
  • 打赏
  • 举报
回复
UP!
cywater2000 2003-11-08
  • 打赏
  • 举报
回复
SOS!
cywater2000 2003-11-07
  • 打赏
  • 举报
回复
我就不信CSDN没有人知道
cywater2000 2003-11-06
  • 打赏
  • 举报
回复
难道是IE的原因?


JAVA的官方资料不也是这样吗?

应该不会出现VC之于C++一样的不完全支持标准吧?

大家用的都是JDK啊
cywater2000 2003-11-06
  • 打赏
  • 举报
回复
UP
tripofdream 2003-11-06
  • 打赏
  • 举报
回复
以前测试过这个问题,结论是“离开Applet所在的主页”时destroy()方法也被调用,实际每次都是不同的实例
cywater2000 2003-11-06
  • 打赏
  • 举报
回复
难道这个问题很难吗?

cywater2000 2003-11-05
  • 打赏
  • 举报
回复
不是吧,你的机器好使?

我的是Win2KSP4+IE6SP1啊?!

请求高人帮助!
coolboy0408 2003-11-04
  • 打赏
  • 举报
回复
我刚才试过了,在我的机器上好使,是不是你的java的编译环境的问题
不过你在换个机器试试
cywater2000 2003-11-04
  • 打赏
  • 举报
回复
加了static也是一样的

好像每一次都调用了init方法啊!
cywater2000 2003-11-04
  • 打赏
  • 举报
回复
与是不是静态的没有关系了。

paint的调用次数能够正确地显示出来啊!

The time(s) of paint is(are) 1

...
多次后
The time(s) of paint is(are) 4
coolboy0408 2003-11-04
  • 打赏
  • 举报
回复
哥哥好象是你的变量定义的问题,我感觉应该是静态变量

象你那样定义的变量,start 开始是是0,等start结束后变量又回到零,所以给你的感觉就是只能执行一次,你不如试试看按把那几个变量改成静态看看
说的不一定对,如果错了不要打我啊(:
cywater2000 2003-11-04
  • 打赏
  • 举报
回复
不好意思,有句话写错了:

strOut = "The time(s) of start is(are) " + i_start;
g.drawString(strOut,25,35);

strOut = "The time(s) of stop is(are) " + i_stop;
g.drawString(strOut,25,50);

strOut = "The time(s) of paint is(are) " + i_paint;
g.drawString(strOut,25,65);

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧