使用事件处理程序处理初始化状态
在初始化 Servlets 之前,Servlets 无法处理来自网页中 JavaScript 代码的请求。从 applet 代码调用 applet 方法或访问 applet 变量将被阻止,直到 applet 的init()
方法完成或该 applet 首先从部署它的网页中调用 JavaScript 代码为止。由于 JavaScript 实现在许多浏览器中都是单线程的,因此在 applet 启动过程中,网页可能似乎被冻结。
从 JDK 7 版本开始,您可以在 applet 加载时检查status
变量,以确定 applet 是否准备好处理来自 JavaScript 代码的请求。您还可以注册在 Applet 初始化的各个阶段将自动调用的事件处理程序。要利用此功能,应在java_status_events
参数设置为"true"
的情况下部署 applet。
在状态和事件处理程序示例中,JavaScript 代码向 applet 注册了onLoad
处理程序。当小应用程序已初始化时,Java 插件软件会自动调用onLoad
处理程序。 onLoad
处理程序调用该 applet 的其他方法以在网页上绘制图形。 DrawingApplet类的init
方法休眠两秒钟,以模拟较 Long 的 applet 初始化时间。
以下步骤描述了如何注册事件处理程序和检查 Servlets 的状态。有关可注册事件处理程序的 applet 状态值和 applet 事件的完整列表,请参见Servlets 状态和事件处理程序。
- 创建一个 JavaScript 函数来注册事件处理程序。以下代码段显示了
registerAppletStateHandler
函数,如果该 applet 尚未加载,该函数将注册onLoad
事件处理程序。
<script>
<!-- ... -->
var READY = 2;
function registerAppletStateHandler() {
// register onLoad handler if applet has
// not loaded yet
if (drawApplet.status < READY) {
drawApplet.onLoad = onLoadHandler;
} else if (drawApplet.status >= READY) {
// applet has already loaded or there
// was an error
document.getElementById("mydiv").innerHTML =
"Applet event handler not registered because applet status is: "
+ drawApplet.status;
}
}
function onLoadHandler() {
// event handler for ready state
document.getElementById("mydiv").innerHTML =
"Applet has loaded";
draw();
}
<!-- ... -->
</script>
- 在
body
标签的 onload 方法中调用先前创建的registerAppletStateHandler
函数。这样可以确保在注册小应用程序的事件处理程序之前,已在网页的文档对象模型(DOM)树中创建了小应用程序的 HTML 标记。
<body onload="registerAppletStateHandler()">
- 部署
java_status_events
参数设置为"true"
的 Servlets。
<script src=
"https://www.java.com/js/deployJava.js"></script>
<script>
// set java_status_events parameter to 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>
在浏览器中打开AppletPage.html以查看 applet 事件处理程序的行为。在AppletPageUpdatedDuringLoading.html页中,检查 applet 的status
变量以确定是否已加载 applet。根据状态,在加载 Servlets 时会不断更新网页。
Note:
如果看不到 Servlets 正在运行,则需要至少安装Java SE 开发套件(JDK)7版本。
Note:
如果看不到示例正在运行,则可能需要在浏览器中启用 JavaScript 解释器,以便 Deployment Toolkit 脚本能够正常运行。
下载源代码用于“状态和事件处理程序”示例,以进一步进行实验。