【问题标题】:Poll applet download progress in jnlp with applet descriptor and in javascript使用小程序描述符和 javascript 在 jnlp 中轮询小程序下载进度
【发布时间】:2011-04-14 14:54:23
【问题描述】:

我有一个使用 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>

如您所见,我的小程序大小为 1x1,因此我不想用它显示任何内容。它只是用于向 javascript 公开一些 java 方法。因此,例如,如果我进行 javascript 调用

//javascript code
var applet = document.getElementById('appletName');

我得到了一个有效的小程序句柄,我可以像这样在 javascript 中调用它的方法:

 //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,如果您愿意的话)显示了这一点: http://download.oracle.com/javase/tutorial/deployment/applet/customProgressIndicatorForApplet.html

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

//javascript code
alert(applet.getLoadingProgress());

我应该做什么,我应该改变 jnlp 声明或类似的东西。任何指针或 cmets 将不胜感激。请注意,我不需要自定义进度条,而只需要一个结构,以便我可以在加载期间使用 javascript 轮询进度。

干杯。

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

【问题讨论】:

    标签: javascript applet loading progress jnlp


    【解决方案1】:

    我不确定如何投票,但我过去用来实现您所描述的方法如下 -

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

    (使用这种方法无法显示一个确定的进度条。但是一个通用的加载指示器可以覆盖整个 html 正文或一个不确定的进度条是非常有可能的并且很容易实现)

    【讨论】:

      【解决方案2】:

      在您发布的 Oracle 网站 (http://download.oracle.com/javase/tutorial/deployment/applet/customProgressIndicatorForApplet.html) 的文档中,小程序调用以下函数来指示其进度,然后相应地更新小程序 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 函数的调用。

      对此进行测试并告诉我们是否可行。

      【讨论】:

      • 我会测试一下,谢谢。我想避免从 Java 调用我的 javascript(我想反过来做),但也许 JSObject 会是更好的解决方案。
      【解决方案3】:

      我不喜欢小程序的外观..

      使用'image' attribute 更改它。

      【讨论】:

      • 问题当然是关于如何使用 javascript 轮询 applet web-start 部署的 applet 的进度,而不是如何制作自定义加载屏幕或用自定义图形替换默认图形。
      • 有很多方法可以实现最终目标,这看起来至少是一个有效的选择。如果该选项不适用于 OP,则 OP 不应接受此作为正确答案,但我不确定为什么它被否决。 +1 @ 安德鲁汤普森。
      • 当然,它被否决了,因为它根本不是问题的答案。问题是:“如何使用 javascript 获得 JNLP 部署的小程序的进度”,而不是“如何更改小程序外观”或“如何使用自定义加载程序”。因此,答案是无关紧要的,因为它是对完全不同的问题的答案。
      • 我有其他半成形的想法,如果一个不确定的进度条的循环图像是不够的,如何解决这个问题。鉴于您的评论,我无法打扰他们进一步思考。祝你好运!
      猜你喜欢
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多