文档

Java™ 教程
隐藏目录
处理初始化状态的事件处理器
路径: 部署
教程: Java Applet
章节: 更多 Applet 操作

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

在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事件。

  1. 创建一个JavaScript函数来注册事件处理程序。下面的代码片段展示了registerAppletStateHandler函数,它会在applet尚未加载时注册一个onLoad事件处理程序。
    <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>        
    
  2. 在标签的onload方法中调用之前创建的registerAppletStateHandler函数。这确保了在注册applet的事件处理程序之前,applet的HTML标签已经在web页面的文档对象模型(DOM)树中被创建。
    <body onload="registerAppletStateHandler()">
    
  3. 使用将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>
    

在浏览器中打开AppletPage.html来查看applet事件处理程序的行为。在AppletPageUpdatedDuringLoading.html页面中,检查applet的status变量来确定applet是否已加载。根据状态,当applet正在加载时,web页面会持续更新。


注意:如果您看不到applet运行,请安装至少Java SE Development Kit (JDK) 7版本。

注意:如果您看不到示例运行,可能需要在浏览器中启用JavaScript解释器,以便Deployment Toolkit脚本能正常工作。

下载状态和事件处理程序示例的源代码以进一步进行实验。


上一页: 从JavaScript代码调用Applet方法
下一页: 操作Applet的网页的DOM