【发布时间】: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