JAVA Applet 了解
来源:互联网 发布:js得到当前星期几 编辑:程序博客网 时间:2024/06/13 12:41
JAVA [ Applet在IE和FF下不同表现]
IE和FireFox以及纯applet运行时三者状态
Applet运行状态
Applet类中的四种基本方法用来控制其运行状态:init()、start()、stop()、destroy()
init()方法
这个方法主要是为Applet的正常运行做一些初始化工作。当一个Applet被系统调用时,系统首先调用的就是该方法。通常可以在该方法中完成从网页向Applet传递参数,添加用户界面的基本组件等操作。
start()方法
系统在调用完init()方法之后,将自动调用start()方法。而且,每当用户离开包含该Applet的主页后又再返回时,系统又会再执行一遍start()方法。这就意味着start()方法可以被多次执行,而不像init()方法。因此,可把只希望执行一遍的代码放在init()方法中。可以在start()方法中开始一个线程,如继续一个动画、声音等。
stop()方法
这个方法在用户离开Applet所在页面时执行,因此,它也是可以被多次执行的。它使你可以在用户并不注意Applet的时候,停止一些耗用系统资源的工作以免影响系统的运行速度,且并不需要人为地去调用该方法。如果Applet中不包含动画、声音等程序,通常也不必实现该方法。
destroy()方法
与对象的finalize()方法不同,Java在浏览器关闭的时候才调用该方法。Applet是嵌在HTML文件中的,所以destroty()方法不关心何时Applet被关闭,它在浏览器关闭的时候自动执行。在destroy()方法中一般可以要求收回占用的非内存独立资源。(如果在Applet仍在运行时浏览器被关闭,系统将先执行stop()方法,再执行destroy()方法。
import java.applet.Applet;
import java.awt.Graphics;
import netscape.javascript.JSObject;
public class jsApplet extends Applet {
static int staticVar=0;//静态变量
int globalVar = 100; //全局变量
public jsApplet() {
super();
System.out.print("初始Applet!");
System.out.println("\tstaticVar = " + staticVar + "; globalVar = " + globalVar);
}
public void init() {
System.out.print("启动Applet!");
staticVar++;globalVar++;
System.out.println("\tstaticVar = " + staticVar + "; globalVar = " + globalVar);
System.out.println(getParameter("p0") + " : " + getParameter("p1")); }
public void start() {
System.out.print("运行Applet!");
staticVar++;globalVar++;
System.out.println("\tstaticVar = " + staticVar + "; globalVar = " + globalVar);
}
public void stop() {
System.out.print("停止Applet!");
staticVar++;globalVar++;
System.out.println("\tstaticVar = " + staticVar + "; globalVar = " + globalVar);
}
public void destroy() {
System.out.print("摧毁Applet!");
staticVar++;globalVar++;
System.out.println("\tstaticVar = " + staticVar + "; globalVar = " + globalVar);
}
public String getAppletInfo() {
return "This is my default applet created by Eclipse";
}
public void paint(Graphics g){
System.out.println("绘画Applet!");
g.drawString( "绘画Applet!" , 10, 40);
}
public void setParameter(String name, String value){
System.out.println("[" + name + "] = " + value );
}
}
启动Applet==========
初始Applet! staticVar = 0; globalVar = 100
启动Applet! staticVar = 1; globalVar = 101
null : null
运行Applet! staticVar = 2; globalVar = 102
绘画Applet!
=====如果点击其他的运行程序,然后回复到applet窗口,则会再次执行“绘画Applet!”;
如果最小化并且还原Applet,则会启动它的stop和start方法========
初始Applet! staticVar = 0; globalVar = 100
启动Applet! staticVar = 1; globalVar = 101
null : null
运行Applet! staticVar = 2; globalVar = 102
绘画Applet!
绘画Applet!
停止Applet! staticVar = 3; globalVar = 103
运行Applet! staticVar = 4; globalVar = 104
绘画Applet!
======
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My applet 'jsApplet' starting page</title>
</head>
<body>
<script type="text/javascript">
//This part is before the Applet init!
//document.jsApplet.setParameter("Timer","beforeStart");
</script>
<applet codebase="applet/"
code="jsApplet.class"
name="jsApplet"
id="jsApplet"
width="320"
align="top"
height="240"
vspace="50"
hspace="50"
alt="无法运行时显示此对话框"
MAYSCRIPT>
<param name="p0" value="name">
<param name="p1" value="Applet">
</applet>
<script type="text/javascript">
document.jsApplet.setParameter("Timer","afterEndApplet");
document.applets[0].setParameter("title2","jesseShen");
document.getElementByIdx_x("jsApplet").setParameter("title3","Siting");
document.getElementByIdx_x("jsApplet")["setParameter"]("title3","Siting");
</script>
</body>
</html>
IE控制台效果
初始Applet! staticVar = 0; globalVar = 100
启动Applet! staticVar = 1; globalVar = 101
name : Applet
运行Applet! staticVar = 2; globalVar = 102
绘画Applet!
[Timer] = afterEndApplet
[title2] = jesseShen
[title3] = Siting
[title3] = Siting
如果最小化并且还原applet后,再次出现“绘画Applet”;
如果关闭网页,则虚拟机关闭;
如果刷新网页,启动stop和destroy方法,并且重启开始init和start,静态变量和动态变量效果不同;
--------------------------------------------
绘画Applet!
停止Applet! staticVar = 3; globalVar = 103
摧毁Applet! staticVar = 4; globalVar = 104
初始Applet! staticVar = 4; globalVar = 100
启动Applet! staticVar = 5; globalVar = 101
name : Applet
绘画Applet!
运行Applet! staticVar = 6; globalVar = 102
[Timer] = afterEndApplet
[title2] = jesseShen
[title3] = Siting
[title3] = Siting
---------------------------------------
绘画Applet!
初始Applet! staticVar = 2; globalVar = 100
启动Applet! staticVar = 3; globalVar = 101
name : Applet
运行Applet! staticVar = 4; globalVar = 102
绘画Applet!
停止Applet! staticVar = 5; globalVar = 103
摧毁Applet! staticVar = 6; globalVar = 104
[Timer] = afterEndApplet
[title2] = jesseShen
[title3] = Siting
[title3] = Siting
这里的全局变量和静态变量效果相同,当关闭当前applet或者重启新applet,效果如前。
Java Script与Java Applet综合运用(一)
先我们编写一个Java Applet,就叫HelloWorld1好了(大家对HelloWorld一定不会陌生).
HelloWorld1.java
import java.awt.*;
import java.applet.*;
public class HelloWorld1 extends Applet
{
public String text="Hello World!";//请注意此处的public
public void paint(Graphics g)
{g.drawString(text,20,20);}
}
编译通过后会生成HelloWorld1.class(别告诉我程序无法通过!如果编译出错请检查是否拼写有误。)
example.html
<html>
<head><title>例子</title></head>
<body>
<script language="JavaScript">
<!--
function SetText()
{
document.app.text="世界你好!";
document.app.repaint();//也请注意此句.
}
//-->
</script>
Java Script与Java Applet的综合运用例一<br>
<applet code="HelloWorld1.class" width="100" height="28" name="app">
</applet>
<form>
<input type="button" value="请点击这里" onclick="SetText()">
</form>
</body>
</html>
用浏览器打开example.html会出现一个显示“Hello World!”的Java Applet以及一个按钮“请点击这里”。我们点一下按钮,你会发现“Hello World!”变成了“世界你好”。这说明Java Script已经成功的改变了HelloWorld1中text的内容。
你也许会问在在HelloWorld1.java中为什么要在text前加public??
还有Java Script中那行:"document.app.repaint();"是什么意思?
是这样的:
和C++一样,在Java中缺省状态下,对象的属性是private,要让Java Script访问到Java Applet中的对象,必须设置为public(包括函数、变量和类)。
前一句document.app.text="世界你好!"仅改变了text的值,要使它反映在浏览器上,必须要让HelloWorld1刷新它的显示,因此要调用HelloWorld1中的repaint()函数。你也许又要问了:我在HelloWorld1.java中并没有看到repaint()函数呀? HelloWorld1是Applet的子类,我们调用repaint()其实是调用类Applet中的repaint()函数。当然我们并不推荐在外部直接修改Applet内的变量,更安全的方法是提供public函数来读取和改变内部变量。
解决IE屏蔽Java Applet问题的方法
什么是ActiveX控件?
ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。在有目录和其它支持的网络中,COM变成了分布式COM(DCOM)。在创建包括ActiveX程序时,主要的工作就是组件,一个可以自足的在ActiveX网络(现在的网络主要包括Windows和Mac)中任意运行的程序。这个组件就是ActiveX近控件。ActiveX是Microsoft为抗衡Sun Microsystems的JAVA技术而提出的,此控件的功能和JAVA applet功能类似。(资料源于百度百科)
一、设置ActiveX控件启用选项解决
(1)IE6.0版本的设置方法
请您在IE浏览器菜单栏依次选择“工具”→“Internet选项”→“安全”→“internet”→“自定义级别”,然后将“ActiveX控件自动提示”、“标记为可安全执行脚本的ActiveX控件执行脚本”、“二进制脚本和行为”、“下载已签名控件”“运行ActiveX控件和插件”这五个选项选择为“启用”;将“对没有标记为安全的ActiveX控件进行初始化和脚本运行”、“下载未签名控件”选择为“提示”。
(2)IE7.0版本的设置方法
请您在IE浏览器菜单栏依次选择“工具”→“Internet选项”→“安全”→“internet”→“自定义级别”,将“ActiveX”控件和插件相关设置进行如下调整:
A、ActiveX控件自动提示:设置为“启用”;
B、对标记为可安全执行脚本的ActiveX控件执行脚本:设置为“启用”;
C、对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本:设置为“提示”;
D、二进制和脚本行为:设置为“启用”;
E、下载未签名的ActiveX控件:设置为“提示”;
F、下载已签名的ActiveX控件:设置为“提示”;
G、允许scriptlet:默认原设置不做更改;
H、允许运行以前未使用的ActiveX控件而不提示:设置为“禁用”;
I、运行ActiveX控件和插件:设置为“启用”;
J、在没有使用外部媒体播放机的网页上显示视频和动画:默认原设置不做更改;
以上设置完成后点击“安全设置”窗口下方的“确定”键,返回到“Internet选项”中“安全”标签的页面,再次点击该页面下方的“确定”键,使更改完成。
(3)IE8.0版本的设置方法
请您在IE浏览器菜单栏依次选择“工具”→“Internet选项”→“安全”→“internet”→“自定义级别”,将“ActiveX”控件和插件相关设置进行如下调整:
A、ActiveX控件自动提示:启用
B、对标记为可安全执行脚本的ActiveX控件执行脚本:启用
C、对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本:提示
D、二进制和脚本行为:启用
E、仅允许经过批准的域在未经提示的情况下使用ActiveX:启用
F、下载未签名的ActiveX控件:提示
G、下载已签名的ActiveX控件:提示
H、允许scriptlet:默认原设置不更改
I、允许运行以前未使用的ActiveX控件而不提示:禁用
J、运行ActiveX控件和插件:启用
K、在没有使用外部媒体播放机的网页上显示视频和动画:默认原设置不更改
3、关闭IE弹出窗口阻止程序。
请您在IE浏览器菜单栏选择“工具”选项后,查看下拉菜单中是否有弹出窗口阻止程序,如果有此选项,请点击-》“弹出窗口阻止程序”-“关闭弹出窗口阻程序”后,重新启动IE尝试登录。如页面显示为“启用弹出窗口阻止程序”可选且“弹出窗口阻止程序设置”为灰色不可选时,则说明目前IE弹出窗口阻止程序已经关闭。
注:IE7以上版本浏览器无法显示Java Applet主要原因是IE7默认安全级别提高了,默认情况下Sun Java控制台是禁用的,即使下载安装了Java虚拟机也无法显示Applet页面。通过IE7“工具”菜单下的“管理加载项”来启用Sun Java控制台即可正常显示Applet页面。
打开IE7的“工具”菜单选择“管理加载”子菜单下“启用或禁用加载项”打开管理加载项对话框在显示下拉列表框中选择“Internet Explorer 中当前加载的加载项”这时你就能在已停用的列表中看到“Sun Java控制台”,选中他然后在设置中单击“启用”单选框,最后确定设置保存。IE7提示您需要重新启动IE浏览器,重新打开IE就能浏览嵌入了 Applet的页面了,如图2所示。
图2
二、安装新版本Sun Java程序解决
如果IE浏览器中的设置都已经按以上的方法设置完成,但Java虚拟机的程序常无法正常启动,则需安装新版本Sun Java程序,你可以去Java的网站:http://www.java.com/zh_CN/下载,你也可以直接在我的网络文件夹中下载新版本Sun Java程序:jre-6u21-windows-i586.rar
关于Applet标签的使用
虽然w3c不推荐使用applet,但用applet在企业内部网(Intranet)中进行applet的部署是一个推荐的常用做法,那么就先来讨论一下<applet>标签的使用。
定义和用法
<applet> 定义嵌入的 applet。
HTML 4.01 与 HTML5 之间的差异
HTML 4.01 中不赞成使用 applet 元素。
HTML5 中不支持 applet 元素。
提示和注释:
提示:HTML5 中不支持 applet 元素。请使用 <object> 代替。
<applet>的使用
再早期进行applet的部署,用<applet>标签是一种很常见的做法,applet标签所有的属性列表,你可以在这里找到,http://www.w3schools.com/tags/tag_applet.asp,里面进行了详细的说明。
1.下面给一个使用applet的例子:
<applet code=Applet1.class width="200" height="200">
Your browser does not support the <code>applet</code> tag.
</applet>
一般我们主要使用的就是这几个属性:
code属性指的是applet类,也就是继承与java.applet.Applet或java.swing.JApplet类的子类,此属性值一定要为你存放applet类的路径;
width属性指的是你的applet在浏览器中所要占用的宽度
height属性指的是你的applet在浏览器中所要占用的高度
2.一般我们使用的就这几个属性,但有时我们将applet打包到了jar文件中,这时我们就要使用archive属性了,比如:
<applet code=package.Applet1.class archive="app.jar" width="200" height="200">
Your browser does not support the <code>applet</code> tag.
</applet>
这个实例的意思,就为在你存放html文件的文件中的app.jar文件中查找package.Applet1.class这个applet类,如果你想要使用多个jar文件,在archive的属性值中以英文编码逗号分隔jar文件,即可。
3.有时我们可能我们想加载的文件不再当前目录,而在其子目录,或者上级目录,这是我们就可以使用codebase属性,例如:
<applet code=Applet1.class codebase="app" width="200" height="200">
Your browser does not support the <code>applet</code> tag.
</applet>
这样Java plug-in就会在当前目录下的app子目录中查找,加载Applet1.class类。
4.我们也可以通过其向applet类中传递参数,比如:
<applet code=Applet1.class codebase="app" width="200" height="200">
<param name="param1" value="1"/>
<param name="param2" value="2"/>
Your browser does not support the <code>applet</code> tag.
</applet>
这样,我们就可以在我们写的applet通过getParameter(String param)方法得到这些参数,使得我们可以在applet标签中就可以配置程序的目的,而传入的参数名,就是我们在param标签的name属性值。
<object>使用
使用object标签,通常只在Internet explorer中使用,例如:
<object
classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
width="200" height="200"
codebase="http://java.sun.com/products/plugin/autodl/
jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0">
<param name="code" value="Applet1.class">
< /object>
属性介绍:
1.classid属性表示要使用的最小Java plug-in版本号,这就表示当前安装的Java plug-in的版本必须大于classid,否则此applet运行不了。通常在Internet Explorer中使用的classid属性值是固定的,即:
classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
此种格式表示使用IE中最新的jre版本。
classid也有另外的一种格式,如下:
classid="clsid:CAFEEFAC-xxxx-yyyy-zzzz-ABCDEFFEDCBA"
xxxx-yyyy-zzzz为Java plug-in的版本号,如1.6.0版本,就可以表示为:
classid="clsid:CAFEEFAC-0016-0000-0000-ABCDEFFEDCBA"
2.width,height属性与applet一样,这里就不介绍了
3.codebase为可选属性,它有以下作用:
在本机安装的JRE(Java Runtime Environment)的版本小于classid属性指定的版本,浏览器则到此url中下载安装jre。
codebase的有如下格式:
codebase=<URL>
此种格式,表是如果本地安装的jre版本不为classid指定的版本,则转到指定的url,进行下载,安装
codebase=<URL>#Version=major,minor,micro,undate
此种格式,如果本机安装的jre版本比classid中指定的小,则到指定的url中下载jre
注意:这里是用英文逗号分隔的。
这里用Sun公司专门为Windows平台下的安装文件各个版本下载文件(.cab格式),http://java.sun.com/javase/6/webnotes/install/jre/autodownload.html。
<embed>标签
使用embed标签,通常在Mozilla系列浏览器中使用,如下:
<embed code="Applet1.class"
width="200" height="200"
type="application/x-java-applet;version=1.6"
pluginspage="http://java.sun.com/javase/downloads/ea.jsp"/>
属性介绍:
1.code,width,height属性于applet标签中的属性相同,这里就不介绍了
2.type属性有如下格式:
type="application/x-java-applet;version=1.6"
此种格式,表示支持MIME类型为application/x-java-applet,版本为1.6或更高的被调用,如果本地安装的jre比version中指定的大或等于,则调用此jre,否则指向pluginspage属性指定的url。
type="application/x-java-applet;jpi-version=1.5.0_07
此种格式,表示本地运行的jre版本必须大于或等于1.5.0_07,否则指向pluginspage的url
<jsp:plugin/>标签的使用
<jsp:plugin type=applet code="Molecule" codebase="/html" >
< jsp:params>
<jsp:param name="molecule" value="molecules/benzene.mol"/>
< /jsp:params>
< jsp:fallback>
<p> Unable to start Plug-in. </p>
< /jsp:fallback>
< /jsp:plugin>
<jsp:plugin>为applet的根标签,我们在jsp页面中的applet所做的动作都在这其中进行
<jsp:param>与applet标签中的<param>相同
<jsp:params>用于包裹多个<jsp:param>标签
<jsp:fallback>用于Java Plug-in启动失败,执行其中的内容,一般顺利执行,则会被忽略
另外一些技术帮助
如何在一个让一个applet能够运行在不同的浏览器中?
有三种办法?
1.使用applet标签
applet标签被大多数的主流浏览器所支持。
2.使用html标签
<object
classid="clsid:CAFEEFAC-0016-0000-0000-ABCDEFFEDCBA"
<param name="code" value="Applet1.class">
<comment>
<embed code="Applet1.class"
type="application/x-java-applet;jpi-version=1.6">
<noembed>
No Java Support.
</noembed>
</embed>
</comment>
</object>
在IE中,IE会识别Object标签,忽略comment签
在Mozilla浏览器中,Mozilla会忽略object,classid,可以识别comment标签
3.使用javascript
<html>
< script language="Javascript">
var _app = navigator.appName;
if (_app == 'Mozilla') {
document.write('<embed code="Applet1.class"',
'width="200"',
'height="200"',
'type="application/x-java-applet;version=1.6">');
}
else if (_app == 'Microsoft Internet Explorer') {
document.write('<OBJECT ',
'classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"',
'width="200"',
'height="200">',
'<PARAM name="code" value="Applet1.class">',
'</OBJECT>');
}
else {
document.write('<p>Sorry, unsupported browser.</p>');
}
< /script>
< /html>
确定自己浏览器的javascript解释器被打开了,在JavaScript中我们可以用appName变量名来取得浏览器的名字,如果
为Mozilla,我们就让JavaScript写出与Mozilla相关的html代码,如果为Microsoft Internet Explorer,就写出与IE相关的html代码。
关于object标签
Object标签:用于定义网页中除图片以外的多媒体
<object>
开始,</object>
结束
- Common-- 一般属性
archive
-- 包含多个使用逗号(,)分割的Java类或外部资源,用于增强applet的功能,定义applet代码border
-- 边框classid
-- 关联一个应用程序,执行嵌入内容的应用程序在windows系统中的唯一id(不能改变此id,否则程序将出现异常),例如clsid:D27CDB6E-AE6D-11cf-96B8-444553540000
-- Flash
codebase
-- 为相对路径提供基URL,IE浏览器通常将此属性中的内容定义为运行嵌入内容所要加载的插件,例如http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0
-- Flash
codetype
-- 嵌入内容的MIME类型,例如application/java
-- Javaapplication/x-shockwave-flash
-- Flash
declare
-- 声明没有实例化的嵌入内容,此内容通常在加载后可以使用,或者当嵌入内容的某些参数将使用其它嵌入内容时declare
-- 声明
data
-- 嵌入内容的URL,可以是根据codebase属性的相对路径height
-- 嵌入内容的高度,单位像素hspace
-- 嵌入内容水平方向的空白,应使用CSS margin代替standby
-- 文档加载时显示的文本信息- tabindex -- 使用"Tab"键的遍历顺序
usemap
-- 定义图像点击区域- viewastext -- 阻止一些可视化工具,例如Microsoft FrontPage或者Visual InterDev在设计页面时运行object内的组件
vspace
-- 嵌入内容垂直方向的空白,应使用CSS margin代替width
-- 嵌入内容的宽度,单位像素
怎么查看控件的classid
在注册表中找.但很麻烦.一般网上就有,你找到这样的CLASSID后记住就可以了,一般最重要的是两个,一个是Windows Media Player,还有一个是你说的realplayer.这两个是最最主要的插件.在注册表中查找
【clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA】这个是realplayer的
注册表的路径是:HKEY_CLASSES_ROOT\CLSID\{CFCDA953-8BE4-11CF-B84B-0020AFBBCCFA}
【classid="clsid:05589FA1-C356-11CE-BF01-00AA0055595A"】这个是Media Player的
注册表的路径是HKEY_CLASSES_ROOT\CLSID\{05589FA1-C356-11CE-BF01-00AA0055595A}
当你在注册表中找到路径后,在后面就会显示是什么的classid了.
JAVA [ Javascript 和 Applet 交互 ]
###############Java 中使用 JavaScript 对象######################
必须引入 netscape.javascript 包,其定义如下:
netscape.javascript.JSObject 允许 Java 代码访问 JavaScript 方法和属性;
netscape.javascript.JSException 允许 Java 代码处理 JavaScript 异常;
netscape.plugin.Plugin 允许客户端 JavaScript 和 applets 操作一个插件(plug-in)。
包在jre\lib\plugin.jar里
用 JSObject 访问 JavaScript
用 Java 来访问客户端 JavaScript,然而 HTML 页必须允许一个 Java applet 访问 JavaScript— 通过在 <APPLET> 标记中指定MAYSCRIPT 属性。当您在 Navigator 中访问 JavaScript 之前,您必须获得
Navigator 窗口的句柄,您可以在 netscape.javascript.JSObject 类中使用的getWindow 方法来达到这个目的。例如,如果先前定义了一个 JSObject 类的变量win,下面的代码将窗口句柄赋予 win:
public class myApplet extends Applet {
public void init() {
JSObject win = JSObject.getWindow(this);
}
}
在 Java 中处理 JavaScript 的异常
当从 Java 中调用的 JavaScript 代码发生了运行时的错误,它就会发出一个
异常,这时您可以用 try...catch 语句来捕获该异常。例如:
try {
global.eval_r("foo.bar = 999;");
} catch (Exception e) {
if (e instanceof JSException) {
jsCodeFailed()";
} else {
otherCodeFailed();
}
}
访问 JavaScript 的对象和属性
我们用 getMember 方法来访问 JavaScript 的对象和属性,例如下面的代码
允许您通过变量 myForm 来访问 JavaScript 对象 document.testForm:
public void init() {
win = JSObject.getWindow(this);
myForm=win.eval_r("document.testForm")
}
您也可以用下面的语句来代替 myForm=win.eval_r("document.testForm"):
JSObject doc = (JSObject) win.getMember("document");
JSObject myForm = (JSObject) doc.getMember("testForm");
如果 JavaScript 对象 document.testForm.jazz 是一个 checkbox,下面的语句
允许您访问它的 checked 属性:
public void init() {
win = JSObject.getWindow(this);
JSObject doc = (JSObject) win.getMember("document");
JSObject myForm = (JSObject) doc.getMember("testForm");
JSObject check = (JSObject) myForm.getMember("jazz");
Boolean isChecked = (Boolean) check.getMember("checked");
}
访问 JavaScript 方法
在 netscape.javascript.JSObject 类中的方法可以让您求出任一
JavaScript 表达式,先用 getWindow 来获得 JavaScript 窗口的句柄,然后再用
eval 来访问一个 JavaScript 方法,如下:
JSObject.getWindow().eval_r("表达式")
###############JavaScript 中使用 Applet对象######################
<applet id = "" codebase = "." archive = "twaver.jar" code = "demo.MainFrame" width = "100%" height = "75%" align= "middle" MAYSCRIPT>
</applet>
...
<SCRIPT LANGUAGE="JavaScript">
<!--
function openURL(name){
alert("hello");
}
//Javascript operates the function 'createServer' in Applet
function createServer(name){
document.applets[0].createServer('A B C');
}
//-->
</SCRIPT>
------------------------------------------------------
import netscape.javascript.*;
...
public class MainFrame extends JApplet {
...
//Applet operates the function 'openURL' in Javascript
private void openURL(String name){
JSObject window = JSObject.getWindow(this);
String code = "openURL(\"" + name + "\");";
window.eval_r(code);
}
public void createServer(String name){
Node server = new Node();
server.setName(name);
box.addElement(server);
}
...
}
###############Java Applet与Ocx控件的交互######################
1.1从Java Applet访问Java Script方法和Ocx控件
Sun公司在JDK中提供了一套从Java Applet访问Java Script的API,由此可以实现Java Applet访问HTML页面中的DOM对象的机制。该API以一个Jar文件的形式提供:%JAVA_HOME%/jre/lib/jaws.jar,其中%JAVA_HOME%是你安装JDK的目录。将该jar文件加入到环境变量classpath中,就可以用它实现从Java Applet到Java Script的调用了。下面是一段调用Java Script中的方法的代码实例:
import netscape.javascript.*;
import java.applet.*;
import java.awt.*;
class MyApplet extends Applet {
public void init() {
JSObject win = JSObject.getWindow(this);
JSObject doc = (JSObject) win.getMember("document");
win.call("f", null);
}}
//在上面的代码中,win.call(“f”, null)调用了JavaScript中的方法f()。
1.2从JavaScript访问Java Applet
当使用Java Plugin1.4.x运行Java Applet时,只需把Java Applet中的方法视为Java Plugin这个控件的方法,直接在Java Script中进行调用即可。下面用一个简单的例子进行说明:
(1) 在载入Java Plugin的Object标签中,用参数ID指定一个名字:
<OBJECT ID="MyPlunin" WIDTH=500 HEIGHT=120CLASSID="CLSID:8AD9C840-044E-11d1-B3E9-00805F499D93"><PARAM NAME="code" value="MyApplet.class">...</OBJECT>
(2) 在HTML页面上增加一个按钮,点击它时从Java Script调用Java Applet中的方法:
<input type="button" name="Button1" value="Start"onClick="calculate" language="JavaScript">
(3) 假定你的Java Applet是MyApplet.java,它有一个public方法method1(),那么就可以用如下的Java Script代码直接调用该方法:
<SCRIPT language="JavaScript">
function calculate() {
document.. MyPlunin.method1()
}
</SCRIPT>
java applet详解、实例
一、先看看一个简单的applet.
import java.applet.*;
import java.awt.*;
public class HelloApplet extends Applet {
public void paint(Graphics g) {
g.drawRect(0, 0, 499, 149);
g.drawString("Printing...", 5, 70);
}
}
以下是html页面:
<HTML>
<HEAD>
<TITLE>A Simple Program</TITLE>
</HEAD>
<BODY>
<CENTER>
<APPLET CODE=" HelloApplet.class" WIDTH="500" HEIGHT="150">
</APPLET>
</CENTER>
</BODY>
</HTML>
运行的前提是把编译后的HelloApplet.class拷贝的和html同一个目录下。这是个很简单的例子,但这样简单的例子在实际应用中用处很少。
二、下面接着学一下applet的标签的用法。
先学习一下applet标签的属性:
Width: Applet在Html页面上的宽度
Height : Applet在Html页面上的高度
Name : Applet在Html页面上的名称,用于区名一个Html页面上的多个Applet。
Id:为 applet 指定一个 id 属性,从而能够将其作为简单的对象处理,用javascript调用其对象的方法。
Archive: 当 applet 被存储在某个 JAVA 档案文件或 ZIP 文件中时,此 applet 的 URL。
Code: 执行 applet 的 class 的 URL。
Codebase: 指示 applet 的基准 URL,假如 code 属性是相对的。
Param:传递参数。
这些属性里面,可能最容易出现错误的是Code和Codebase属性。举个例子可能就明白了:
假如我的web工程下有个index.jsp的页面放在根目录下,该页面需要调用一个applet,而这个HelloApplet.java在com包下。正确的做法是先把HelloApplet.class拷贝到index.jsp的同一目录下,然后
<APPLET CODE="com.HelloApplet.class" id="helloApplet" codebase="."/>
注意:
1、 code一定要写包名,codebase="."表示是从index.jsp的当前目录开始。
2、 一定要把HelloApplet.class拷贝出来放到jsp的页面目录下,如果放到web-info/classes/com/下就会出错,因为web-inf文件夹安全性比较高,客户端无法访问的。
三、下面我们看一个复杂的例子,这个例子中前台的页面需要调用的applet不是一个class,这样就需要调用一个jar包,而且这个applet需要调用客户端本地的应用程序。
(1) Applet类:
package com;
import java.applet.*;
import java.awt.*;
import java.io.IOException;
public class HelloApplet extends Applet {
public void paint(Graphics g) {
g.drawRect(0, 0, 499, 149);
g.drawString("Hello World", 5, 70);
}
/**
* 通过applet调用本地的计算器
*/
public void openApp() {
String url = "C:\\WINDOWS\\system32\\calc.exe";
System.out.println("url=" + url);
try {
Runtime.getRuntime().exec(url);
} catch (IOException e) {
e.printStackTrace();
}
}
}
(2) jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>demo</title>
</head>
<body>
<APPLET CODE="com.HelloApplet.class" id="helloApplet" codebase="." ARCHIVE = "helloApplet.jar" WIDTH="500" HEIGHT="150">
</APPLET>
<p><a href="#" onclick="openApp()">计算器</a></p>
<script type="text/javascript">
function openApp()
{
var helloApplet = document.getElementById("helloApplet");
helloApplet.openApp();
}
</script>
</body>
</html>
(3)把HelloApplet打成jar包,因为在实际的应用中一个类就能解决问题的情况很少。Cmd 切换到web-info/classes目录下,通过如下命令打包:
jar -cvf helloApplet.jar *.*
(4)为了使得applet能够访问本地的应用,需要给它签名。
keytool -genkey -keystore hello.store -alias hello
这个命令用来产生一个密匙库,执行完毕后应该产生一个 hello.store的文件,这个名字你可以对它进行修改。另外在执行命令的时候还有提示你输入密匙库的密码,这里你一定要记住,否则后面要用的时候无法输入。输入密码后,它会提示你输入用户名,公司名等信息,这些都不是必须输入的,你可以直接回车跳过,最后问你输入是否正确,你可以输入y或n回答正确或错误。
keytool -export -keystore hello.store -alias hello -file hello.cert
这个命令用来产生签名时所要用的证书,这个命令执行完后产生一个pepper.cert的文件。
jarsigner -keystore hello.store helloApple
这个命令用上面产生的证书将我们的jar文件进行了签名。最后把该jar包拷贝到jsp文件所在地目录下。
(5)因为applet的运行是沙箱机制,在调用本地程序时需要做安全性设置。在本地运行该applet的jre\lib\security\java.policy文件里最后加permission java.security.AllPermission;这里需要注意的是如果客户端装有多个jre的话,需要找一下哪个jre是真正运行applet的。
(6)在运行的时候,第一次会提示是否信任该applet,点击使准信任,然后运行,下次就不会在提示。
注意:在用浏览器调试applet的过程中,可以打开java控制台,位置在Ie的工具菜单的java控制台。
- JAVA Applet 了解
- 了解Java Applet小程序
- 对 Java applet的小了解
- java.applet.Applet类
- java applet
- java applet
- Java Applet
- JAVA Applet
- java Applet
- java applet
- Java applet
- Java Applet
- java applet
- java--Applet
- java applet
- Java Applet
- JAVA Applet???
- java applet
- poj3259( spfa 和 bellman_ford)
- coursera 中计算概论的第六周 B-05作业
- 题目1171:C翻转
- 在c#中运用策略模式(在看过鸭子应用之后)
- 机器学习中的最优化问题
- JAVA Applet 了解
- 解决Android SDK Manager下载太慢问题
- 有向图的最小生成树
- 下载intel linux驱动程序的好网站
- vs2010编译chromium的时候 copy_obj.sh: line 6: $'\r': command not found
- AsyncTask的用法
- [ACM] hdu 1846 Brave Game (巴什博奕)
- MonkeyRunner Recorder & PlayBack
- sizeof 精要