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的其他方法,在网页上绘制图形。
类的DrawingApplet
init
方法休眠两秒钟,以模拟长时间的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.html
status
变量来确定applet是否已加载。根据状态,当applet正在加载时,web页面会持续更新。
下载状态和事件处理程序示例的源代码以进一步进行实验。