三:Java之Applet

首先我要说的是Applet是一种应用程序,它是一种由JAVA编写的小应用程序,通常这样的应用程序都像他的名字一样,是一个非常小的程序,或许有些朋友就会问了,那么它是用来干什么的呢?JAVA程序就是JAVA程序啊,为什么要弄出个小应用程序?

一、Applet初识

       Applet编程是JAVA编程语言至关重要的独特功能,它不同与一般的JAVA程序的地方是,它可以嵌入在HTML网页中,并由支持JAVA的WEB浏览器来动态下载解释运行,当然我们所使用的IE浏览器3.0以上的版本号是支持JAVA小应用程序的,有了这样的小应用程序,我们的网页就能有一定的交互功能。

       在Java Applet中,能够实现图形绘制,字体和颜色控制,动画和声音的插入,人机交互及网络交流等功能。 Applet还提供了名为抽象窗体工具箱(Abstract Window Toolkit, AWT)的窗体环境开发工具。 AWT利用用户计算机的GUI元素,能够建立标准的图形用户界面,如窗体、button、滚动栏等等。眼下,在网络上有许多的Applet范例来生动地展现这些功能,读者能够去调阅对应的网页以观看它们的效果。

        Applet的工作原理

       含有Applet的网页的HTML文件代码中部带有<applet> 和</applet>这样一对标记,当支持Java的网络浏览器遇到这对标记时,就将下载对应的小应用程序代码并在本地计算机上运行该Applet。

       Applet的下载与图形文件一样须要一定的时间,若干秒后它才干在屏幕上显示出来。等待的时间则取决于Applet的大小和用户的网络连接的速度。一旦下载以后,它便和本地计算机上的程序以同样的速度执行了。

 

       Applet在用户的计算机上运行时,还能够下载其他的资源,如声音文件、图像文件或很多其他的Java代码,有些Applet还同意用户进行交互式操作。但这须要反复的链接与下载,因此速度非常慢,这是一个亟待解决的问题,能够想到的一个好办法是採用类似快速缓存的技术,将每次下载的文件都暂时保存在用户的硬盘上,尽管第一次使用时花的时间比較多,但当再次使用时,仅仅需直接从硬盘上读取文件而无需再与Internet连接,便能够大大提高性能了。

二、Applet和application

   在JAVA语言中,可以独立执行的程序称为Java应用程序(Application)。Java语言还有第二种程序——Application 程序。

JavaApplet和JavaApplication在结构方面的主要差别表如今:

(1)执行方式不同。Java Applet程序不能单独执行,它必须依附于一个用HTML语言编写的网页并嵌入当中,通过与Java兼容的浏览器来控制执行。Java Application是完整的程序,能够独立执行,仅仅要有支持Java的虚拟机,它就能够独立执行而不须要其它文件的支持。

(2)执行工具不同。执行Java Applet程序的解释器不是独立的软件,而是嵌在浏览器中作为浏览器软件的一部分。Java Application程序被编译以后,用普通的Java解释器就能够使其边解释边执行,而Java Applet必须通过网络浏览器或者Applet观察器才干执行。

(3)程序结构不同。每一个Java Application程序必然含有一个而且仅仅有一个main方法,程序执行时,首先寻找main方法,并以此为入口点開始执行。含有main方法的那个类,常被称为主类,也就是说,Java Application程序都含有一个主类。而Applet程序则没有含main方法的主类,这也正是Applet程序不能独立执行的原因。虽然Applet没有含main方法的主类,但Applet一定有一个从 java.applet.Applet派生的类,它是由Java系统提供的。

(4)Java Applet程序能够直接利用浏览器或AppletViewer提供的图形用户界面,而Java Application程序则必须另外书写专用代码来营建自己的图形界面。

(5)受到的限制不同Java Application程序能够设计成能进行各种操作的程序,包含读/写文件的操作,可是 Java Applet 对网站的磁盘文件既不能进行读操作,也不能进行写 操作。然而,因为 Applet的引入,使Web页面具有动态多媒体效果和可交互性能,这使由名为超文本、实为纯文本的HTML语言编写成的Web页面真正具有了超文本功能,不但能够显示文本信息,并且还能够有各种图片效果和动态图形效果,从而使页面显得生动漂亮;另外,Applet使Web页面添加了button等功能,从而添加了交互性。

JavaApplet和JavaApplication在执行方面的主要差别表如今:Java Application通常是在本地机上执行,而Java Applet一般放在server上,它是依据本地机的请求被下载到本地机,然后才在本地机上执行。

三、基本框架

Applet的基本框架是由一套方法组成的,它们提供了浏览器与Applet之间的接口以及二者运行控制的基本机制;方主要法例如以下:

1、init():

创建Applet时运行,该方法仅仅被运行一次;

当Applet程序第一次被支持Java的浏览器载入时,便运行该方法;在Applet程序的生命周期中,该方法仅仅被运行一次,因此能够在当中进行一些仅仅运行一次的初始化操作,如:处理由浏览器传递进来的參数、加入用户接口组件、载入图像和声音文件等;Applet程序有默认的构造方法,但它习惯于在init()方法中运行全部的初始化,而不是在默认的构造方法内;

2、start():

该方法多次运行,当浏览器从图标恢复成窗体,或者是返回该主页时运行;

系统在调用完init()方法之后,将自己主动调用此方法;并且每当浏览器从图标恢复为窗体时,或者用户离开包括该Applet程序的主页后又再返回时,系统都会再运行一遍start()方法;因此,该方法在Applet程序的生命周期中被调用多次,以启动Applet程序的运行,这一点与init()方法不同;该方法是Applet程序的主体,在当中能够运行一些须要反复运行的任务或者又一次激活一个线程,比如:開始动画或播放声音等;

3、stop():

该方法被多次运行,当浏览器变成图标时,或者是离开主页时运行,主要功能是停止一些耗用系统资源的工作;

与start()相反,当用户离开Applet程序所在页面或浏览器变成图标时,会自己主动调用此方法;因此,该方法在Applet的生命周期中也被多次调用;这样使得能够在用户并不注意Applet程序的时候,停止一些耗用系统资源的工作(如中断一个线程),以免影响系统的执行速度,且并不须要去人为地去调用该方法;假设你的Applet程序中不包括动画、声音等程序,通常也不必重载该方法;

4、destroy():

该方法用来释放资源,在stop()之后运行;

浏览器正常关闭时,Java自己主动调用这种方法;该方法方法用于回收不论什么一个与系统无关的内存资源;当然,假设这个Applet程序仍然处于活动状态,那么Java会在调用该方法之前,先自己主动调用stop()方法;

5、其他方法:

paint(Graphicsg):该方法用于详细的界面绘制;

update():该方法用于详细的界面刷新;

repaint():该方法用于详细的界面重绘;

 

四、例子程序

1、Applet代码:

<span style="font-size:18px;">importjava.io.*;
importjava.awt.*;
importjava.lang.*;
importjava.applet.*;
publicclass MyApplet extends Applet
{private String strUserName;private String strPassword;private int   iCount;private int   iPosX;public void init(){strUserName =this.getParameter("username");strPassword =this.getParameter("password");iCount     = Integer.parseInt(this.getParameter("count"));iPosX      = 25;}public void paint(Graphics g){g.drawRect(10, 10, iWidth, iHeigh);g.drawString("UserName: " +strUserName + " Count:" + iCount, iPosX, 60);g.drawString("Password: " +strPassword, iPosX, 80);}
}</span>


2、HTML代码:

<span style="font-size:18px;"><html><head><metahttp-equiv="Content-Type" content="text/html;charset=GB2312"><metahttp-equiv="Content-Language" Content="zh-CN"><title>JSP APPLET TEST</title></head><body><Applet id="MyApplet"name="MyApplet" code="MyApplet.class"codebase="." height="300" width="300"><param name="username"value="sankhya"><param name="password"value="bdxnote"><param name="count"value="30"></Applet></body>
</html></span>


五、Applet相关问题

1.  Applet是什么

 Applet又称为Java小应用程序,是可以嵌入到一个HTML页面中,而且可通过Web浏览器下载和运行的一种Java类。  Applet不须要main()方法,由Web浏览器中内嵌的Java虚拟机调用运行。

2.  Applet的安全限制

 由于applet是从远端server上下载而且在本地执行,所以安全性就显得格外重要。通过限制applet在沙箱(applet的执行环境)中执行,保证了对本地系统而言applet是安全的。

  applet在沙箱中执行时:

⑴    不能执行不论什么本地可执行程序;

⑵    除了存放下载的applet的server外,applet不能和其他主机进行通信。

⑶不能对本地文件系统进行读写。

3.  Applet的生命周期

  init():当浏览器载入applet,进行初始化的时候调用该方法。

  start():在init()方法之后调用。当用户从其他页面转到包括applet的页面时,该方法也被调用。

  stop():在用户离开包括applet的页面时被调用。

 destroy():当applet不再被使用,或浏览器退出的时候,该方法被调用。

4.  paint()方法这个paint还是来自于AWT

 Applet本质上是图形方式的,我们应该在图形环境中绘制我们的显示内容。

我们能够通过创建一个paint()方法在Applet的panel上画图。仅仅要Applet的显示须要刷新,paint()方法就会被浏览器环境调用。比如,当Applet的显示尺寸发生变化的时候,或浏览器窗体被最小化或被要求以图标方式显示时,这样的调用就会发生。

我们应该编写自己的paint()方法,以使它在不论什么时候被调用,都能正常地工作。对它的调用是异步产生的,且由Applet的执行环境而不是程序来驱动。

paint()方法带有一个參数,它是java.awt.Graphics类的一个实例。这个參数总是建立该Applet的panel的图形上下文,我们能够用这个图形上下文在Applet中画图或写入文本。

5.  applet从网页中获取信息

正如应用程序能够通过命令行參数来获取信息一样,通过使用param标记,applet能够从网页中获取信息。

 在浏览器中显示信息:调用AppletContext接口中的showStatus()方法

请求浏览器显示指定的网页:调用AppletContext接口中的showDocument()方法。

 

6.  applet的HTML标记和属性

n  用于定位的applet属性

⑴    width和height:必要的属性,以象素为单位,设定applet的宽度和高度。

⑵        align:可选的属性,指定applet对齐的方式。

left:       把applet放在网页左边,后面的文本会移至applet的右边。

right:      把applet放在网页右边,后面的文本会移至applet的左边。

bottom:     把applet的底部与当前行文本底部对齐。

top:        把applet的顶部与当前行顶部对齐。

texttop:    把applet的顶部与当前行文本顶部对齐。

middle:     把applet的中部与当前行基线对齐。

absmiddle:  把applet的中部与当前行中部对齐。

baseline:   把applet的底部与当前行基线对齐。

absbottom:  把applet的底部与当前行底部对齐。

⑶vspace和hspace:可选的属性,指定在applet上/下的象素数目(vspace)和applet两边的象素数目(hspace)。

   用于编码的applet属性

⑴    code:指定applet类文件的名字。该名字要么是相对于codebase,那么是相对于当前页面。

⑵        codebase:可选的属性,告诉浏览器到哪个文件夹下去寻找类文件。

⑶ archive:可选的属性,列出Java存档文件、包括类文件的文件或者applet须要的其他资源。

(4)object:用来指定applet类文件的另外一个方法。

⑸name:可选的属性,页面脚本编写人员希望赋予applet名字属性,这样,在编写脚本的时候,就能够用为该属性指定的名字来代表这个applet。

附录:AWT动画,还是讨论paint(),update(),repaint()之间的关系

更新显示由一种被称为AWT线程的独立的线程来完毕。这个线程可用来处理与显示更新相关的两种情况。

      第一种情况是显露(exposure),它在首次显示时,或在部分显示已被破坏而必须刷新时出现。显示的破坏可能发生在不论什么时刻,因此,我们的程序必须能在随意时刻更新显示。

      另外一种情况是在程序重画带有新内容的画面时。这样的重画可能会要求首先擦除原来的图像。

paint(Graphicsg)方法

     当组件第一次显示,或受损的部分须要修复时被调用。除非必要,更新不会全然覆盖整个图形区域,而是严格限制在被破坏的范围内。

repaint()方法

     对repaint()的调用可通知系统:你想改变显示,于是系统将调用paint()。

update(Graphicsg)方法

     repaint()实际上产生了一个调用还有一方法update()的AWT线程。update方法通常清除当前的显示并调用paint()。update()方法能够被改动,比如:为了降低闪烁可不清除显示而直接调用paint()。

 

转载于:https://www.cnblogs.com/gcczhongduan/p/4507941.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于事件驱动架构构建微服务第19部分:使用 SignalR 和 Azure Active Directory 构建和保护实时通信...

原文链接&#xff1a;https://logcorner.com/building-micro-services-through-event-driven-architecture-part19-building-and-securing-real-time-communications-using-signalr-and-azure-active-directory/命令 HTTP API 将事件存储到事件存储&#xff0c;但不直接将它们发…

LeetCode之Maximum Depth of Binary Tree

1、题目 Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node. Subscribe to see which companies asked this question. 2、代码实现 /*** Definition for a…

java 多线程之间通信_JAVA多线程之线程间的通信方式解析

JAVA多线程之线程间的通信方式解析一&#xff0c;介绍本总结我对于JAVA多线程中线程之间的通信方式的理解&#xff0c;主要以代码结合文字的方式来讨论线程间的通信&#xff0c;故摘抄了书中的一些示例代码。二&#xff0c;线程间的.通信方式①同步这里讲的同步是指多个线程通过…

Orchard之生成新模板

一&#xff1a;启用 Code Generation 进入后台&#xff0c; Modules –> Developer Enable 之。 二&#xff1a;生成模版 首先&#xff0c;进入 Orchard 命令行 在 CMD 下到达解决方案的 Web 的 Bin 目录下&#xff0c;打开 Orchard 命令&#xff0c;输入&#xff1a; code…

Java设计模式-状态模式(State)

核心思想就是&#xff1a;当对象的状态改变时&#xff0c;同时改变其行为&#xff0c;很好理解&#xff01;就拿QQ来说&#xff0c;有几种状态&#xff0c;在线、隐身、忙碌等&#xff0c;每个状态对应不同的操作&#xff0c;而且你的好友也能看到你的状态&#xff0c;所以&…

cookies,sessionStorage 和 localStorage 的区别?

cookie是网站为了标示用户身份而储存在用户本地终端&#xff08;Client Side&#xff09;上的数据&#xff08;通常经过加密&#xff09;。cookie数据始终在同源的http请求中携带&#xff08;即使不需要&#xff09;&#xff0c;记会在浏览器和服务器间来回传递。sessionStorag…

基于Prometheus的.NET 4.x应用服务监控

【.NET监控】| 总结/Edison Zhou0Why 监控&#xff1f;Edison所在团队95%以上的应用都是基于.NET 4.5开发的&#xff0c;只能跑在Windows Server服务器上的IIS中&#xff0c;公司运维也没有意愿对Windows Server进行有效的管理和提供监控支持&#xff0c;整得我们无法及时查看有…

php+对象+toarray_PHP 对象、数组间的转换

PHP 对象、数组间的转换/*** PHP 对象、数组间的转换** author flyer0126* since 2012/05/03**/// 1. 利用(array)和(object)&#xff0c;简单处理$objTemp (object)array();$objTemp->a 1;$objTemp->b 2;$objTemp->c 3;$arrTemp (array)$objTemp;print_r($objTe…

LeetCode之Happy Number

1、题目 Write an algorithm to determine if a number is "happy". A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process u…

高效沟通的7C原则

2019独角兽企业重金招聘Python工程师标准>>> 怎样确保沟通的顺畅和高效性呢&#xff1f;成功人士已经总结了很多方法&#xff0c;七项基本原则是一种基本的方法&#xff0c;起到了检查列表的作用&#xff0c;在你发送信息之前&#xff0c;对照检查可以帮助你确认信息…

ps切片导出时将切片选项选择为“所有用户切片”

ps切片导出时将切片选项选择为“所有用户切片”&#xff0c;可导出所有切中的区域。转载于:https://www.cnblogs.com/npk19195global/p/4513707.html

WTMPlus 1.4 Uniapp来了

点击上方蓝字关注我们1.4版本长期以来&#xff0c;WTM都是后台管理系统的开发利器&#xff0c;对于移动端支持的不够。这次WTMPlus 1.4我们加入了对UniApp的支持&#xff0c;你可以轻松的使用WTMPlus同时制作后台管理系统和各种移动端小程序了。前后台模式切换用户现在可以自由…

php真随机数,php 的伪随机数与真随机数实例详解

这篇文章主要介绍了PHP的伪随机数与真随机数详解,本文首先讲解了真随机数和伪随机数的相关概念,并给出了比用mt_rand()函数产生更好的伪随机数的一段例子代码,需要的朋友可以参考下首先需要声明的是&#xff0c;计算机不会产生绝对随机的随机数&#xff0c;计算机只能产生“伪随…

LeetCode之Power of Two

1、题目 Given an integer, write a function to determine if it is a power of two. Credits: Special thanks to jianchao.li.fighter for adding this problem and creating all test cases. Subscribe to see which companies asked this question. 2、分析 比如我们发…

代码的坏味道之一——译自《重构》

重复代码Duplicated Code 臭味集合里面排第一的就是重复代码了。如果你在不止一处发现了同样结构的代码&#xff0c;你可以确定如果你找到一种方法来统一他们的话&#xff0c;你的程序将会改善。 最简单的重复代码问题是当你在同一个类中有两个方法有相同的表达时出现的。那么你…

远程连接mysql速度慢的解决方法

PHP远程连接MYSQL速度慢,有时远程连接到MYSQL用时4-20秒不等,本地连接MYSQL正常,出现这种问题的主要原因是,默认安装的MYSQL开启了DNS的反向解析,在MY.INI(WINDOWS系统下)或MY.CNF(UNIX或LINUX系统下)文件的[mysqld]下加入skip-name-resolve这一句。连接mysql速度慢的解决方法.…

C#中的表达式和运算符

欢迎您成为我的读者&#xff0c;希望这篇文章能给你一些帮助。前言今天和大家一起学习下C#中的表达式和运算符&#xff0c;都是很基础的知识点。在日常的编码过程中&#xff0c;对于表达式和运算符我们每天都在使用。比如像下面的代码int age27;就是一种表达式。运算符是一个符…

【转】jQuery中的bind(),live(),delegate(),on()事件绑定方式的区别

bind() 简要描述 bind()向匹配元素添加一个或多个事件处理器。…

LeetCode之Two Sum II - Input array is sorted

1、题目 Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the target, where index…

php 怎么定义一个空对象,php定义空对象的方法

本文主要和大家分享php定义空对象的方法&#xff0c;有时候我们直接对不存在的数组直接定义其下标的值,不会报错,但是我们定义不存在的对象的时候,就会报错,这个时候我们定义一个空对象即可.有以下三种方法:<?php $obj1 new \stdClass;// Instantiate stdClass object$obj…