使用小程序描述符和javascript在jnlp中轮询小程序下载进度

使用小程序描述符和javascript在jnlp中轮询小程序下载进度,javascript,applet,loading,progress,jnlp,Javascript,Applet,Loading,Progress,Jnlp,我有一个使用deployJava脚本部署的WebStart小程序。jnlp文件如下所示: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <jnlp codebase="" href="launch.jnlp" spec="1.0+"> <information> <title>someApp</title> <vendor>

我有一个使用deployJava脚本部署的WebStart小程序。jnlp文件如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jnlp codebase="" href="launch.jnlp" spec="1.0+">
    <information>
        <title>someApp</title>
        <vendor>someCompany</vendor>
        <homepage href="http://www.someCompanysWebsite.net"/>
        <description>someDescription</description>
        <description kind="short">someShortDescription</description>
    <offline-allowed/>
    </information>
<update check="background"/>
<security>
<all-permissions/>
</security>
    <resources>
<j2se version="1.5+"/>
<jar href="mainJar.jar" main="true"/>


<jar href="lib1.jar"/>
<jar href="lib2.jar"/>
<jar href="lib3.jar"/>
<jar href="platform.jar"/>
<jar href="plugin.jar"/>
<jar href="slf4j-api-1.6.1.jar"/>
<jar href="slf4j-simple-1.6.1.jar"/>
</resources>
    <applet-desc height="1" main-class="com.companyName.applet.appletClass" name="appletName" width="1">

    </applet-desc>
</jnlp>
 //javascript code
    applet.doStuff();
我获得了小程序的有效句柄,并且能够在javascript中调用其方法,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jnlp codebase="" href="launch.jnlp" spec="1.0+">
    <information>
        <title>someApp</title>
        <vendor>someCompany</vendor>
        <homepage href="http://www.someCompanysWebsite.net"/>
        <description>someDescription</description>
        <description kind="short">someShortDescription</description>
    <offline-allowed/>
    </information>
<update check="background"/>
<security>
<all-permissions/>
</security>
    <resources>
<j2se version="1.5+"/>
<jar href="mainJar.jar" main="true"/>


<jar href="lib1.jar"/>
<jar href="lib2.jar"/>
<jar href="lib3.jar"/>
<jar href="platform.jar"/>
<jar href="plugin.jar"/>
<jar href="slf4j-api-1.6.1.jar"/>
<jar href="slf4j-simple-1.6.1.jar"/>
</resources>
    <applet-desc height="1" main-class="com.companyName.applet.appletClass" name="appletName" width="1">

    </applet-desc>
</jnlp>
 //javascript code
    applet.doStuff();
当然,每个小程序都定义了isActive()方法,因此在我的javascript代码中,如果小程序已完全加载,我可以这样检查:

    //javascript code
    function isFullyLoaded()
    {
      if ( !applet.isActive() ){
         setTimeout('isFullyLoaded()',1000);
      }
      else 
      {
         //do nice stuff requiring the applet is loaded
      }
    }
但是,由于小程序的加载可能需要一段时间,我希望有一个加载进度指示。快速查看Sun(或Oracle,如果您愿意的话)可以看出:

但是,这意味着我想在小程序加载时显示加载条或任何东西。我不喜欢小程序的外观,这就是为什么我只想用javascript轮询小程序加载,就像在某个时间间隔:

//javascript code
alert(applet.getLoadingProgress());
我应该怎么做,我应该修改jnlp声明或者类似的东西。如有任何提示或意见,将不胜感激。请注意,我不需要自定义进度条,只需要一个结构,以便在加载过程中使用javascript轮询进度

干杯

编辑: @阿米尔 我将提请您注意,JNLP部署的小程序和应用程序在加载期间,只要下载所需的JAR之一,就会调用通用DownloadServiceListener类的方法进度(java.net.URL、java.lang.String版本、long ReadsFar、long total、int overallPercent)。了解JAR的总数和尚未下载的JAR数量将是一个完美的进度指示器。我还想提醒您,如果调试JNLP部署,您将看到这些方法被调用并记录为网络级事件。所以,我的问题是如何使用javascript来掌握这些方法,这样我就可以对进度进行一些估计,因为我不希望用户通过查看java控制台来估计进度。我不想展示一个不确定的进度加载器,因为实现它很容易,但没有任何实际用途

我不喜欢你的外表

使用。

更改它。我不确定如何进行投票,但我在过去使用的实现您所描述内容的方法如下-

  • 加载小程序时(在我的情况下 我通常会在 单击按钮或 一些),显示你的 特定于javascript/html的加载 指标
  • 当小程序加载时,它会回调 javascript方法。JS现在知道小程序已完全加载,取下加载指示器并执行任何进一步的JS->applet通信,等等

(使用这种方法不可能显示确定的进度条。但是,在整个html正文上屏蔽的通用加载指示器或不确定的进度条是非常可能的,而且很容易实现)

在您发布()的Oracle站点的文档中,小程序调用下面的函数来指示其进度,然后相应地更新小程序UI和进度栏

public void progress(URL url, String version, long readSoFar,
                 long total, int overallPercent) {        
  // check progress of download and update display
  updateProgressUI(overallPercent);

}
我相信,您可以简单地将对
updateProgressUI(overallPercent)
的调用替换为对更新网页中进度指示器的Javascript函数的调用


测试这一点,让我们知道是否可能。

当然,问题是如何用javascript轮询applet web start部署的applet的进度,而不是如何制作自定义加载屏幕或用自定义图形替换默认图形。有许多方法可以实现最终目标,这看起来至少是一个有效的选项。如果选项不适用于OP,OP不应该接受这一正确答案,但我不确定为什么会被否决+1@Andrew Thompson。当然,它被否决了,因为它根本不是问题的答案。问题是:“如何使用javascript获取JNLP部署小程序的进度”,而不是“如何更改小程序外观”或“如何使用自定义加载程序”。因此,答案是不相关的,因为它是一个完全不同的问题的答案。我有其他半成型的想法,如何在不确定进度条的循环图像不够的情况下处理这个问题。鉴于你的评论,我不屑于进一步考虑他们。祝你好运!我会测试一下,谢谢。我想避免从Java调用javascript(我想用另一种方式),但也许JSObject是更好的解决方案。