Java 教程是针对 JDK 8 编写的。本页中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java 语言变化,了解 Java SE 9 及后续版本中更新的语言特性摘要。
请参阅JDK 发行说明,了解所有 JDK 发布版本的新功能、增强功能和已删除或弃用选项的信息。
在applet初始化之前,它无法处理来自网页中JavaScript代码的请求。在applet的init()方法完成之前,从JavaScript代码调用applet方法或访问applet变量将被阻塞,或者applet首次从部署它的网页中调用JavaScript代码。由于许多浏览器中JavaScript实现是单线程的,applet启动期间网页可能会出现冻结的情况。
JDK 7发布以后,您可以在applet加载过程中检查applet的status变量,以确定applet是否准备好处理来自JavaScript代码的请求。您还可以注册事件处理程序,在applet初始化的各个阶段自动调用它们。为了利用这个功能,应该将applet部署时的java_status_events参数设置为"true"。
在状态和事件处理程序示例中,JavaScript代码向applet注册了一个onLoad处理程序。当applet被初始化后,Java插件软件会自动调用onLoad处理程序。onLoad处理程序调用applet的其他方法,在网页上绘制图形。类的DrawingAppletinit方法休眠两秒钟,以模拟长时间的applet初始化过程。
以下步骤描述了如何注册事件处理程序并检查applet的状态。请参阅Applet状态和事件处理程序,获取完整的applet状态值列表和可以注册事件处理程序的applet事件。
<script>
<!-- ... -->
var READY = 2;
function registerAppletStateHandler() {
// 如果applet尚未加载,则注册onLoad处理程序
if (drawApplet.status < READY) {
drawApplet.onLoad = onLoadHandler;
} else if (drawApplet.status >= READY) {
// applet已经加载或者存在错误
document.getElementById("mydiv").innerHTML =
"未注册applet事件处理程序,因为applet状态为: "
+ drawApplet.status;
}
}
function onLoadHandler() {
// ready状态的事件处理程序
document.getElementById("mydiv").innerHTML =
"applet已加载";
draw();
}
<!-- ... -->
</script>
<body onload="registerAppletStateHandler()">
java_status_events参数设置为"true"来部署applet。
<script src=
"https://www.java.com/js/deployJava.js"></script>
<script>
// 将java_status_events参数设置为true
var attributes = { id:'drawApplet',
code:'DrawingApplet.class',
archive: 'applet_StatusAndCallback.jar',
width:600, height:400} ;
var parameters = {java_status_events: 'true', permissions:'sandbox' } ;
deployJava.runApplet(attributes, parameters, '1.7');
</script>
在浏览器中打开来查看applet事件处理程序的行为。在AppletPage.html页面中,检查applet的AppletPageUpdatedDuringLoading.htmlstatus变量来确定applet是否已加载。根据状态,当applet正在加载时,web页面会持续更新。
下载状态和事件处理程序示例的源代码以进一步进行实验。