优化Java Applet的加载过程

大家知道,在java applet还没有全部加载的时候,IE或Netscape会在applet对应的区域显示一块灰色的区域。那,您有没有想过用其他的方式代替它呢?

本文介绍了如何利用JavaScript 实现在加载java applet时候显示一段消息,比如请稍候之类的话。该段代码可以在IE和Netscape运行。

下面的代码就可以解决这个问题。

<script language="JavaScript">
<!-- Hide script from old browsers
  function init(){
   // Microsoft Internet Explorer
   if (document.all){
   document.all.loading.style.visibility="hidden";
   document.all.myapplet.style.visibility="visible";
   document.applets[0].repaint();
   }
   // Netscape Navigator
   else{
   document.loading.visibility="hide";
   document.myapplet.visibility="visible";
   }
  }
// -->
</script>
<BODY onLoad="init()">
<div id="loading" style="position:absolute;left:150;top:10;">
Please wait while Java applet loads...
</div>
<div id="myapplet" style="position:absolute;left:150;top:10;visibility:hidden">
<applet code="charts.charts.class" archive="charts.jar" width="600" height="400" codebase="" VIEWASTEXT>
<Param name="xValue" value="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,
23,24,25,26,27,28,29,30">
<Param name="yValue" value="22,21,19,23,18,24,28,30,27,22,20,18,16,18,19,16,17,14,12,
13,16,18,19,20,16,17,13,10,14,19,25">
</applet>
</div>
</BODY>

解释:

首先,让我们来看看我们真正想做的是什么. 其实我们只不过希望把下载java程序过程中的不雅观的灰块去掉,以一些消息如正在载入,请稍候之类的画面盖住原来的灰色区域。而一旦java加载完毕,马上把该区域恢复为applet可见。

上面的javascript代码就是实现了这个目的的一个实例。

下面,让我来逐条解释一下我们是如何实现的。

首先请看以下部分。

<div id="loading" style="position:absolute;left:150;top:10;">
Please wait while Java applet loads...
</div>
<div id="myapplet" style="position:absolute;left:150;top:10;visibility:hidden">
<applet code="charts.charts.class" archive="charts.jar" width="600" height="400" codebase="" VIEWASTEXT>
<Param name="xValue" value="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,
23,24,25,26,27,28,29,30">
<Param name="yValue" value="22,21,19,23,18,24,28,30,27,22,20,18,16,18,19,16,17,14,12,
13,16,18,19,20,16,17,13,10,14,19,25">
</applet>
</div>

正如您所见到的,我用了2个层,第一个层(id为loading)可以写上一些提示消息。而第2个层(id为myapplet)在一开始是不可见的。当applet下载好了,马上把第2个层显示出来,并把第一个层设为不可见。因此,只要这2个层大小,位置必须完全一致。就可以实现我们的目标。

现在我们只差最后一个问题需要解决:如何知道applet已经完全下载了呢?在IE和netscape中都有提供document.all这个属性,当应页面的全部内容(包括applets,图片,声音等)已经下载后该属性为真。好,这样,我们只需监测document.all是否为真,如果是,那就可以把消息所在的层设为不可见,而applet所在的层设为可见,并刷新applet的显示(因为先前applet的显示被隐藏了),否则则相反处理。

这是处理后的代码:

<script language="JavaScript">
  function init()
  {
   if (document.all)
   {
    document.all.loading.style.visibility="hidden";
    document.all.myapplet.style.visibility="visible";
    document.applets[0].repaint();
   }
   else
   {
    document.loading.visibility="hide";
    document.myapplet.visibility="visible";
   }
  }
</script>

大功告成。其实,用这个办法同样适用于用含有图片盖住applet直到applet开始运行为止。如何处理,我想聪明的你一定已经知道答案了。

时间: 2024-11-03 22:02:01

优化Java Applet的加载过程的相关文章

javascript-JSP页面加载过程中阻塞与优化

问题描述 JSP页面加载过程中阻塞与优化 加载JSP页面时,由于初始化的js执行的方法与数据库进行大量的交互,造成阻塞,页面加载不完整,页面处于无响应状态,在加载时,添加一个超时方法,页面显示完整,页面处于无响应状态,如何优化 解决方案 参考Facebook的pipeline架构.页面分为许多pagelet,然后通过chunk-encoding来分块加载会好些.也就是在页面里一块一块加载. 还有,常用数据最好放在Redis中,数据库查询比缓存慢多了.

java的各种加载和初始化的详细过程

一.什么时候加载和初始化 1.类什么时候加载 类的加载是通过类加载器(Classloader)完成的,它既可以是饿汉式[eagerly load](只要有其它类引用了它就加载)加载类,也可以是懒加载[lazy load](等到类初始化发生的时候才加载).不过我相信这跟不同的JVM实现有关,然而他又是受JLS保证的(当有静态初始化需求的时候才被加载) 2.类什么时候初始化 加载完类后,类的初始化就会发生,意味着它会初始化所有类静态成员,以下情况一个类被初始化: 实例通过使用new()关键字创建或者

Android WebKit HTML主资源加载过程

Android WebKit HTML主资源加载过程 前言 在浏览器里面输入网址,最终浏览器会调用WebView的loadUrl(),然后就开始加载整个网页.整个加载过程中,最重要的一步就是HTML主资源的加载.WebKit将网页的资源分为主资源(MainResource)和子资源(SubResource). WebKit资源分类 主资源:HTML文件. 子资源:CSS, JS, JPG等等,除了HTML文件之外的所有资源都称之为子资源 本章主要讲主资源的加载过程,子资源的加载过程后期会专门详细

Java中类的加载顺序剖析(常用于面试题)_java

这其实是去年校招时我遇到的一道阿里巴巴的笔试题(承认有点久远了-.-),嗯,如果我没记错的话,当时是作为Java方向的一道选做大题.当然题意没有这么直白,题目只要求你写出程序运行后所有System.out.println的输出结果,其中程序是题目给的,而各个System.out.println的执行顺序不同会导致最后程序输出的结果也不同. 具体的题目我肯定记不清,不过我们可以换个直接的问法,如果类A和类B中有静态变量,静态语句块,非静态变量,非静态语句块,构造函数,静态方法,非静态方法,同时类A

spring启动component-scan类扫描加载过程---源码分析

最近因为写书的事情,一段时间没有写博客了,有朋友最近问到了spring加载类的过程,尤其是基于annotation注解的加载过程,有些时候如果由于某些系统部署的问题,加载不到,很是不解!就针对这个问题,我这篇博客说说spring启动过程,用源码来说明,这部分内容也会在书中出现,只是表达方式会稍微有些区别,我将使用spring 3.0的版本来说明(虽然版本有所区别,但是变化并不是特别大),另外,这里会从WEB中使用spring开始,中途会穿插自己通过new ClassPathXmlApplicat

java 中类的加载顺序(转)

1.虚拟机在首次加载Java类时,会对静态初始化块.静态成员变量.静态方法进行一次初始化 2.只有在调用new方法时才会创建类的实例 3.类实例创建过程:按照父子继承关系进行初始化,首先执行父类的初始化块部分,然后是父类的构造方法:再执行本类继承的子类的初始化块,最后是子类的构造方法 4.类实例销毁时候,首先销毁子类部分,再销毁父类部分 public class Parent { public static int t = parentStaticMethod2(); { System.out.

.NET编译器中CLR加载过程

按以下贴操作的: http://developer.51cto.com/art/200908/146091.htm 由于现在不太了解VS即时窗口,所以后面的测试没有作. 以前,看<程序员的自我修养>,讲解文件PE格式时,也涉及到这些内容.但主要以直接加载过程为主. 而现在.NET为主流了.所以要多学习呀. .NET的几个核心组件的被调用顺序大致是: mscoree.dll -----> mscorwks.dll(mscorsvr.dll)  -----> mscorlib.dll

jvm系列(一):java类的加载机制

java类的加载机制   1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口. 类加载器并不需要等到某个类被"首次主动使用"时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载

WorldWind系列五:插件加载过程全解析

不得不承认World Wind的代码真的很庞大,没有太多帮助文档的前提下,一头钻进代码里肯定令你头疼的,甚至研究代码间关联仿佛是在走迷宫.我最近一直想弄明白如何在 MenuBar中加载那些插件的,WorldWind学习系列四中研究的只是特殊的三个功能加载的,那三个没有继承Plugin类,不算是插件功能加载.所以WorldWind学习系列四加载的三个是特殊情况,不是一般的插件加载.今天下午终于柳暗花明,如果你真正关注World Wind分析,那么就好好看看下面的插件加载过程全解析. 我们先看看Pl