# 使用事件处理程序处理初始化状态

> 原文： [https://docs.oracle.com/javase/tutorial/deployment/applet/appletStatus.html](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`` ](examples/applet_StatusAndCallback/src/DrawingApplet.java)类的`init`方法休眠两秒钟以模拟长小程序初始化期。

以下步骤描述了如何注册事件处理程序和检查 applet 的状态。有关可以注册事件处理程序的 applet 状态值和 applet 事件的完整列表，请参阅 [Applet 状态和事件处理程序](https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/applet_dev_guide.html#JSDPG719)。

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

    ```
    &lt; script&gt; &lt;！ -  ...  - &gt; var READY = 2; function  registerAppletStateHandler（） {//如果 applet 已经//尚未加载，则注册 onLoad 处理程序 if（drawApplet.status&lt; READY）{drawApplet.onLoad = onLoadHandler; } else if（drawApplet.status&gt; = READY）{// applet 已经加载或者//是错误 document.getElementById（“mydiv”）。innerHTML =“Applet 事件处理程序未注册，因为 applet 状态为：”+ drawApplet.status; function  onLoadHandler（） {//就绪状态 document.getElementById（“mydiv”）的事件处理程序.innerHTML =“Applet 已加载”;画（）; }&lt;！ -  ...  - &gt; &LT; /脚本&GT; 
    ```

2.  在`body`标签的 onload 方法中调用先前创建的`registerAppletStateHandler`功能。这确保了在注册 applet 的事件处理程序之前，已在网页的文档对象模型（DOM）树中创建了 applet 的 HTML 标记。

    ```
    &lt;body onload="registerAppletStateHandler()"&gt;

    ```

3.  在`java_status_events`参数设置为`"true"`的情况下部署 applet。

    ```
    &lt; script src =“https://www.java.com/js/deployJava.js"&gt;&lt;/script&gt; &LT;脚本&GT; //将 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'）; &LT; /脚本&GT; 
    ```

在浏览器中打开 [``AppletPage.html``](examples/dist/applet_StatusAndCallback/AppletPage.html)以查看 applet 事件处理程序的行为。在 [``AppletPageUpdatedDuringLoading.html``](examples/dist/applet_StatusAndCallback/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](http://www.oracle.com/technetwork/java/javase/downloads/index.html) 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.

* * *

[下载 _ 状态和事件处理程序 _ 示例的源代码](examplesIndex.html#StatusEventHandler)以进一步试验。