当前位置: 技术问答>java相关
applet一个奇怪的问题。
来源: 互联网 发布时间:2015-05-18
本文导语: applet中init(),start(),stop(),destroy()运行机制,显而易见,但我真的拿出来一试,就出现文奇怪的问题:源代码如下: #---- my.java -------- public class my extends Applet { String s; int inits = 0; int starts = 0; int stop...
applet中init(),start(),stop(),destroy()运行机制,显而易见,但我真的拿出来一试,就出现文奇怪的问题:源代码如下:
#---- my.java --------
public class my extends Applet {
String s;
int inits = 0;
int starts = 0;
int stops = 0;
public void init() { inits++; }
public void start() { starts++; s = "inits: " + inits +
", starts: " + starts +
", stops: " + stops;}
public void stop() { stops++; }
public void paint(Graphics g) {
g.drawString(s, 10, 10);
}
} ///:~
#------- myFrame.html --------
New Document
以下是中的原话:
#--------------------------
试验这个程序片时,会发现假如最小化WEB浏览器,或者用另一个窗口将其覆盖,那么就不能再调用stop()和start()(这一行为会随着不同的实现方案变化;可考虑将Web浏览器的行为同程序片观察器的行为对照一下)。调用唯一发生的场合是在我们转移到一个不同的Web页,然后返回包含了程序片的那个页时。
#---------------------------
但我拿到机器上运行,却发现永远是inits=1,starts=1,stop=0;
我把my.class删掉,IE重新启动,删掉历史纪录,myFrame.html超常运行!!!
我在整个硬盘上搜索my.class文件,都没有,那她调用的是那的class呢?
如果是内存中的,我也重启IE了。。。
这个问题台奇怪了,虽然不是什么技术难点,但我还是象弄明白,请教各位了:)
#---- my.java --------
public class my extends Applet {
String s;
int inits = 0;
int starts = 0;
int stops = 0;
public void init() { inits++; }
public void start() { starts++; s = "inits: " + inits +
", starts: " + starts +
", stops: " + stops;}
public void stop() { stops++; }
public void paint(Graphics g) {
g.drawString(s, 10, 10);
}
} ///:~
#------- myFrame.html --------
New Document
以下是中的原话:
#--------------------------
试验这个程序片时,会发现假如最小化WEB浏览器,或者用另一个窗口将其覆盖,那么就不能再调用stop()和start()(这一行为会随着不同的实现方案变化;可考虑将Web浏览器的行为同程序片观察器的行为对照一下)。调用唯一发生的场合是在我们转移到一个不同的Web页,然后返回包含了程序片的那个页时。
#---------------------------
但我拿到机器上运行,却发现永远是inits=1,starts=1,stop=0;
我把my.class删掉,IE重新启动,删掉历史纪录,myFrame.html超常运行!!!
我在整个硬盘上搜索my.class文件,都没有,那她调用的是那的class呢?
如果是内存中的,我也重启IE了。。。
这个问题台奇怪了,虽然不是什么技术难点,但我还是象弄明白,请教各位了:)
|
我遇到过这个问题的
我现在都是用appletviewer来调试APPLET
就没有这个问题
我现在都是用appletviewer来调试APPLET
就没有这个问题
|
你每次开Ie的时候都要调用init(),start(),方法吧
同时也在初始化
int inits = 0;
int starts = 0;
但你调用stop() 时,Ie已经关掉了或佳再了其他内容了,你当然也看不见了试试如下代码:要用java控制台清空内存
import java.applet.*;
import java.awt.*;
public class my extends Applet {
String s;
static int inits = 0;
static int starts = 0;
static int stops = 0;
public void init() { inits++; }
public void start() { starts++; s = "inits: " + inits +
", starts: " + starts +
", stops: " + stops;}
public void stop() { stops++; }
public void paint(Graphics g) {
g.drawString(s, 10, 10);
}
}
同时也在初始化
int inits = 0;
int starts = 0;
但你调用stop() 时,Ie已经关掉了或佳再了其他内容了,你当然也看不见了试试如下代码:要用java控制台清空内存
import java.applet.*;
import java.awt.*;
public class my extends Applet {
String s;
static int inits = 0;
static int starts = 0;
static int stops = 0;
public void init() { inits++; }
public void start() { starts++; s = "inits: " + inits +
", starts: " + starts +
", stops: " + stops;}
public void stop() { stops++; }
public void paint(Graphics g) {
g.drawString(s, 10, 10);
}
}
|
可以把inis前面的static去掉
|
public void init() {...} //小程序初始化代码
//浏览器调入小程序时,Applet做的初始化工作
public void start() {…} //做完初始化后,开始运行
public void stop() {…} //小程序停止运行
//浏览器进入到别的页面,或者退出时在destroy之前运行
public void destroy() {…} //final destroy cleanup
//浏览器回收小程序,此时小程序应做的善后工作
//浏览器调入小程序时,Applet做的初始化工作
public void start() {…} //做完初始化后,开始运行
public void stop() {…} //小程序停止运行
//浏览器进入到别的页面,或者退出时在destroy之前运行
public void destroy() {…} //final destroy cleanup
//浏览器回收小程序,此时小程序应做的善后工作
|
你使用appletviewer有问题吗?
如果没有问题的话,我猜想是你的ie的问题(上面有说过ie的缓存,你把ie里面的所有缓存文件去掉试试?)
你在什么平台下面运行的?(ie的版本?)
如果没有问题的话,我猜想是你的ie的问题(上面有说过ie的缓存,你把ie里面的所有缓存文件去掉试试?)
你在什么平台下面运行的?(ie的版本?)