273.md 4.2 KB
Newer Older
W
wizardforcel 已提交
1
# 使用事件处理器处理初始化状态
W
init  
wizardforcel 已提交
2 3 4 5 6

> 原文: [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 启动期间可能会冻结网页。

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

W
wizardforcel 已提交
9
在状态和事件处理器示例中,JavaScript 代码使用 applet 注册`onLoad`处理器。初始化 applet 时,Java Plug-in 软件会自动调用`onLoad`处理器。 `onLoad`处理器调用 applet 的其他方法在网页上绘制图形。 [``DrawingApplet`` ](examples/applet_StatusAndCallback/src/DrawingApplet.java)类的`init`方法休眠两秒钟以模拟长小程序初始化期。
W
init  
wizardforcel 已提交
10

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

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

    ```
W
wizardforcel 已提交
16
    < 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 已加载”;画(); }<! -  ...  - > < /脚本> 
W
init  
wizardforcel 已提交
17 18
    ```

W
wizardforcel 已提交
19
2.`body`标签的 onload 方法中调用先前创建的`registerAppletStateHandler`功能。这确保了在注册 applet 的事件处理器之前,已在网页的文档对象模型(DOM)树中创建了 applet 的 HTML 标记。
W
init  
wizardforcel 已提交
20 21 22 23 24 25 26 27 28 29 30 31

    ```
    <body onload="registerAppletStateHandler()">

    ```

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

    ```
    < 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'); < /脚本> 
    ```

W
wizardforcel 已提交
32
在浏览器中打开 [``AppletPage.html``](examples/dist/applet_StatusAndCallback/AppletPage.html)以查看 applet 事件处理器的行为。在 [``AppletPageUpdatedDuringLoading.html``](examples/dist/applet_StatusAndCallback/AppletPageUpdatedDuringLoading.html)页面中,检查 applet 的`status`变量以确定是否已加载 applet。根据状态,在加载 applet 时不断更新网页。
W
init  
wizardforcel 已提交
33 34 35 36 37 38 39 40 41 42 43 44 45

* * *

**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.

* * *

W
wizardforcel 已提交
46
[下载 _ 状态和事件处理器 _ 示例的源代码](examplesIndex.html#StatusEventHandler)以进一步试验。