使用事件处理器处理初始化状态

原文: https://docs.oracle.com/javase/tutorial/deployment/applet/appletStatus.html

在初始化 applet 之前,applet 无法处理网页中 JavaScript 代码的请求。在 applet 的init()方法完成或 applet 首次从部署它的网页调用 JavaScript 代码之前,将阻止调用 applet 方法或从 JavaScript 代码访问 applet 变量。由于 JavaScript 实现在许多浏览器中都是单线程的,因此在 applet 启动期间可能会冻结网页。

从 JDK 7 发行版开始,您可以在加载时检查 applet 的status变量,以确定 applet 是否已准备好处理来自 JavaScript 代码的请求。您还可以注册在 applet 初始化的各个阶段自动调用的事件处理器。要利用此功能,应在将java_status_events参数设置为"true"的情况下部署 applet。

在状态和事件处理器示例中,JavaScript 代码使用 applet 注册onLoad处理器。初始化 applet 时,Java Plug-in 软件会自动调用onLoad处理器。 onLoad处理器调用 applet 的其他方法在网页上绘制图形。 DrawingApplet 类的init方法休眠两秒钟以模拟长小程序初始化期。

以下步骤描述了如何注册事件处理器和检查 applet 的状态。有关可以注册事件处理器的 applet 状态值和 applet 事件的完整列表,请参阅 Applet 状态和事件处理器

  1. 创建一个 JavaScript 函数来注册事件处理器。以下代码片段显示了registerAppletStateHandler函数,如果尚未加载 applet,则该函数会注册onLoad事件处理器。

    1. < 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() {//就绪状态 document.getElementById(“mydiv”)的事件处理器.innerHTML =“Applet 已加载”;画(); }<! - ... - > < /脚本>
  2. body标签的 onload 方法中调用先前创建的registerAppletStateHandler功能。这确保了在注册 applet 的事件处理器之前,已在网页的文档对象模型(DOM)树中创建了 applet 的 HTML 标记。

    1. <body onload="registerAppletStateHandler()">
  3. java_status_events参数设置为"true"的情况下部署 applet。

    1. < script src =“https://www.java.com/js/deployJava.js"></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'); < /脚本>

在浏览器中打开 AppletPage.html以查看 applet 事件处理器的行为。在 AppletPageUpdatedDuringLoading.html页面中,检查 applet 的status变量以确定是否已加载 applet。根据状态,在加载 applet 时不断更新网页。


Note: If you don’t see the applet running, you need to install at least the Java SE Development Kit (JDK) 7 release.



Note: If you don’t see the example running, you might need to enable the JavaScript interpreter in your browser so that the Deployment Toolkit script can function properly.


下载状态和事件处理器示例的源代码以进一步试验。