分享
 
 
 

又一次Applet回顾

王朝java/jsp·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

Flash的出现使Applet的地位受到严重影响;

浏览器显示网页的原理

网页文件是普通的文本文件;

标记语言只能控制显示,但不具有

逻辑性,比如不可以判断用户的输入是否真确;

正是为了在瘦客户端实现交互,我们用

网页脚本;浏览器遇见脚本标签的时候

就用引擎来执行;

<script language="vbscript">

<!--

...

...

..

-->

也就是说,如果想要使用脚本,则浏览器必须

有调用脚本引擎的能力;

那么我们可以说applet是脚本吗?

好像不是啊!

IE在一段时间里去掉了了对Java的支持;

因此Applet被人们遗忘了很久;pity;

Sun与MicroSoft的仇恨!!

后来Sun把执行applet的虚拟机做成浏览器的

插件,你在安装jdk的最后时刻一定看到了

Java(TM) plugin 安装到IE的提示;

浏览器总是试图纠正用户的错误标签而不是

报错;

再次说明基础:

init()被调用一次;

每次进入包含applet的页面就调用一次

start();

浏览器离开包含applet的页面时调用stop()

方法;

//这说明applet在没被看见的时候不运行的,

有效地节省了资源;

destroy()在浏览器关闭时销毁applet对象;

paint()在每次Applet的界面需要被画的时候被调用;

paint(Graphics g)中g描述了Applet界面的环境;

一个定时器的实现思想:

如果你的主线程程序强烈要求在特定的时间

间隔就做出某一个动作,那么如果你使用本线程

来睡眠的方法十分不合理:因为你的程序还希望做

别的更有意义的事情而不是只是每个一个时间段

就做那个机械的动作;所以我们可以用主线程来

启动一个线程,让这个副线程睡眠一个时间间隔后

回调主线程做出那个动作的方法;

而整个过程中主线程根本就不要任何地关注;

两种模式的区别:

一:

mainThread:

{

while(true)

{

Thread.sleep(400);

action();

}

}

二:

mainThread

{

sonThread=new Thread();

otheraction();

}

sonThread

{

while(true)

{

Thread.sleep();

mainThread.action();

}

}

因为applet是运行在客户端而资源在服务器

端,所以不要在你写的Applet里使用绝对路径

访问资源;而且一个applet可能被卖到多个不同的

服务器上使用;

有一个原则就是:applet源文件和资源的相对

路径不要改变;

Component.update(Graphics g)方法:

repaint()方法调用update()方法;

默认的系统实现的update()方法

先调用了调用了paint()方法;

最小化,最大化的暴光操作是直接

调用paint()方法的;

而调用repaint()方法则一定会

通过update()方法来调用paint()方法;

所以你有机会在覆盖update()方法,试图

不调用paint()方法;

*****关于paint(),repaint(),update()方法的一些 试验与解释:

*****paint(Graphics g)方法就是在组件上绘图;

*****repaint()方法做以下调用:

***** 调用update(Grpahics g)方法;

***** update(Graphics g)做以下调用:

***先调用clear()清除组件上已绘制图像;

***再调用paint(Graphics g)方法绘制图像;

***所以我们有这样一些试验:

如果你没有重写update()方法,则每次调用repaint()之后,

都可以在组件上重新绘制一副新图像;

如果你重写的update()方法什么都没做,则每次调用repaint()

方法后,你的组建上的图像不会变化;

如果你重写的update()方法只调用了paint(Graphics g)而没有

调用clear(),则每次调用repaint()之后,你的组件上的图像是重叠

了新旧图像的图像;

****注意:repaint()方法可以手动调用从而间接调用了paint(Graphics g)方法;

但是paint(Graphics g)是不能手动调用的;

****TMD面向对象就是牛!

Applet的相关知识:

WWW浏览器是applet运行的容器,或者你

就说是引擎吧!

applet是浏览器的插件;

注意:容器才是真正的应用程序,插件只是容器能够使用的

函数;这么一来,我们知道,其实服务器上的应用

程序是Tomcat而不是我们写的servlet和jsp,

我们只是在给Tomcat写可以调用的插件而已;

servlet,ejb技术都是这种容器与插件的程序架构设计模式;

Applet的控制台输出:Java控制台;

控制台可以输出如同System.out.print()

之类的语句;

解释器一般有两个:

MicroSoft vm;

Sun Jre;

Applet的限制:

不能启动执行其他的应用程序;

不能进行文件I/O操作;

不能调用本机代码;

不能与Applet所在的主机之外的其他

主机进行网络连接;

解释:如果恶意的Web服务器提供给用户下载

applet,如果applet被下载到客户机上能够进行

I/O操作和启动别的程序,那客户上的信息有可能被

发送到Web服务器上,或者客户机会受到病毒感染;

提供Applet的服务器将applet下载到客户机上,

如果在客户机上applet能够与提供applet的服务器之外

的主机连接,进行恶意攻击,那这个主机查回来

之后发现的元凶是这个客户机而不是提供applet

的服务器;

<applet>标记

一个网页中可以有多个<applet>标记

<applet

[archive=archiveList] //预先要载入的资源,如.jar;

code=appletFile.class

width=pixels

height=pixels

[codebase=codebaseURL]

[alt=alternateText]

[name=appletInstanceName]//用于一个Applet调用另一个

[align=alignment] //applet,进行通信;

[vspace=pixels]

[hspace=pixels]

>

[<param name=appletAttribute 1 value=value>]

[<param name=appletAttribute 2 value=value>]

[apternameHTML]

</applet>

getParameter()的参数对大小写是不敏感的;

但是我们应该保持一致;

<object>标记

W3C协会建议人们用<object>标记代替<applet>标记;

可以使用jdk提供的HTMLConverter将<applet>

标记转换为<object>标记;

HTMLConverter的使用:

1,转换后的.html文件名与原来的.html文件名一样;

使用<object>标记,执行applet的Java解释器被

作为一个ActiveX插件引用;

这时候,插件是解释器而不是Applet程序本身了;

<object>中有一个属性是

classid来指定ActiveX控件的唯一标识号;

codebase = "http://java.sun.com/update/1.5.0

/jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0"

指定了虚拟机,如果机器上没有装,则会自动下载安装;

可见,<Applet>标记没有自动下载安装解释器的功能,

而<object>标记可以,这就是为什么我们用

<object>标记;

在多个网页中引用同一个Applet

如果两个网页中都用到了同一个Applet类,

当浏览器访问了第一个后,再去访问第二个网页的时候,

是否还为第二个网页创建一个新的Applet实例??

结论:

当不同的网页访问同一个applet的时候,浏览器都会

创建一个新的实例对象;

注意:只有使用同一个浏览器窗口的时候才会提供Applet中

的静态变量的共享;也就是如果你用同一个浏览器窗口

多次访问一个applet,这个applet中的静态变量是每次创建的

实例对象共享的,也就是说这些多次访问过程中使用的是同一个

Applet的Class对象;

但是如果你用不同的窗口来多次访问同一个Applet的话,那么这些

访问中并不是用了同一个Applet的Class对象;

从而静态变量也无法共享;因为静态变量是由Class对象

来保持的;

张老师丢人了啊,做的试验结果竟然与讲的理论不一样;

烦人的浏览器机制,我们不必详细了解了;

不同的厂家的解释器,同一厂家的不同版本的

计时器的内部实现方式的差异,使得理论与

现实有所出入,这在计算机界很正常,

所以不要死记硬背是正道;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有