通过JavaWebStart进行JavaFX部署-加载进度条
我的应用程序是由JavaWS部署的,但在用户单击JNLP后,会有一个长时间的暂停,似乎什么都没有发生,然后应用程序会弹出屏幕。JavaWS正在后台下载所有jar,但是没有进度指示,这非常糟糕。所以我开始构建一个自定义的:通过JavaWebStart进行JavaFX部署-加载进度条,java,deployment,progress-bar,javafx,java-web-start,Java,Deployment,Progress Bar,Javafx,Java Web Start,我的应用程序是由JavaWS部署的,但在用户单击JNLP后,会有一个长时间的暂停,似乎什么都没有发生,然后应用程序会弹出屏幕。JavaWS正在后台下载所有jar,但是没有进度指示,这非常糟糕。所以我开始构建一个自定义的: public class LoadingProgress implements DownloadServiceListener { Stage stage; TextArea log = new TextArea(); public
public class LoadingProgress implements DownloadServiceListener
{
Stage stage;
TextArea log = new TextArea();
public LoadingProgress()
{
stage = new Stage(StageStyle.UNDECORATED);
stage.setScene(new Scene(PaneBuilder.create().children(log).prefHeight(300).prefWidth(300).build()));
stage.show();
}
@Override
public void downloadFailed(URL url, String version)
{
log.appendText(String.format("failed url=%s version=%s\n", url, version));
}
@Override
public void progress(URL url, String version, long readSoFar, long total, int overallPercent)
{
log.appendText(String.format("progress url=%s version=%s readSoFar=%d total=%d overallPercent=%d\n", url, version, readSoFar, total, overallPercent));
}
@Override
public void upgradingArchive(URL url, String version, int patchPercent, int overallPercent)
{
log.appendText(String.format("validating url=%s version=%s patchPercent=%d overallPercent=%d\n", url, version, patchPercent, overallPercent));
}
@Override
public void validating(URL url, String version, long entry, long total, int overallPercent)
{
log.appendText(String.format("validating url=%s version=%s entry=%d total=%d overallPercent=%d\n", url, version, entry, total, overallPercent));
}
}
下面是我的JNLP。您会注意到,我曾尝试以三种不同的方式使用自定义加载器类,但没有一种方法可以单独使用或组合使用:
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="6.0+" codebase="${url}" xmlns:jfx="http://javafx.com" href="Companyapp.jnlp">
<information>
... info ...
</information>
<update check="always" policy="prompt-update" />
<security>
<all-permissions />
</security>
<resources>
<jfx:javafx-runtime version="2.2+" href="http://javadl.sun.com/webapps/download/GetFile/javafx-latest/windows-i586/javafx2.jnlp" />
</resources>
<resources>
<j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se" />
... jar assets ...
</resources>
<jfx:javafx-desc main-class="com.mediacitizens.companyapp.presentation.desktop.Main" name="Companyapp" progress-class="com.mediacitizens.companyapp.presentation.desktop.LoadingProgress" /> <!-- width="0" height="0" //-->
<application-desc main-class="com.mediacitizens.companyapp.presentation.desktop.Main" progress-class="com.mediacitizens.companyapp.presentation.desktop.LoadingProgress" />
<component-desc progress-class="com.mediacitizens.companyapp.presentation.desktop.LoadingProgress" />
</jnlp>
... 信息。。。
... jar资产。。。
因此,所有这些都没有任何区别。即使使用完整的日志记录+跟踪,控制台也不会打印任何有趣的内容
发生了什么事?我不能确切地告诉您设置出了什么问题,但您不需要实现自己的
下载服务来处理这个问题。相反,我建议按照Oracle的官方建议使用JavaFX预加载程序。该指南提供了高效启动应用程序的性能提示,包括将预加载程序分离到其自己的jar文件中、不阻塞JavaFX应用程序线程、启用后台更新检查、将某些jar标记为延迟加载、禁用自动代理配置等
通过使用Oracle JavaFX官方部署指南中的工具,您不需要手动编辑jnlp
文件,因为这些工具应该为您生成一个文件,以便高效地加载应用程序
遵循以下步骤可能会帮助您确定初创公司的性能问题所在
JavaWS正在后台下载所有jar,但是没有进度指示,这非常糟糕
真奇怪。你怎么知道JAR下载需要时间呢?JavaFX系统附带了一个默认的预加载程序,它应该在应用程序jar下载时显示进度(它只是一个白色屏幕中央的蓝色进度条)
“JavaFX系统附带了一个默认的预加载程序”是的,我记得我们有过一段时间,我想是在添加之前
然后转到提取的示例目录并运行javaws-employ.jnlp
,标准预加载程序在应用程序启动时显示蓝色进度条。也许,如果您使用与Ensemble示例应用程序类似的打包说明,那么情况会更好
更新
我刚刚注意到以下重新打开的bug。正如我前面提到的,我实际上没有遇到这个bug,并且在OS X(Java 8 build 88)上为我显示了默认的JavaFX预加载程序,因此我不确定在什么情况下可能会遇到这样的bug,但可能需要注意一些事情。我不能确切地告诉您的设置出了什么问题,但是您不需要实现自己的下载服务来处理这个问题。相反,我建议按照Oracle的官方建议使用JavaFX预加载程序。该指南提供了高效启动应用程序的性能提示,包括将预加载程序分离到其自己的jar文件中、不阻塞JavaFX应用程序线程、启用后台更新检查、将某些jar标记为延迟加载、禁用自动代理配置等
通过使用Oracle JavaFX官方部署指南中的工具,您不需要手动编辑jnlp
文件,因为这些工具应该为您生成一个文件,以便高效地加载应用程序
遵循以下步骤可能会帮助您确定初创公司的性能问题所在
JavaWS正在后台下载所有jar,但是没有进度指示,这非常糟糕
真奇怪。你怎么知道JAR下载需要时间呢?JavaFX系统附带了一个默认的预加载程序,它应该在应用程序jar下载时显示进度(它只是一个白色屏幕中央的蓝色进度条)
“JavaFX系统附带了一个默认的预加载程序”是的,我记得我们有过一段时间,我想是在添加之前
然后转到提取的示例目录并运行javaws-employ.jnlp
,标准预加载程序在应用程序启动时显示蓝色进度条。也许,如果您使用与Ensemble示例应用程序类似的打包说明,那么情况会更好
更新
我刚刚注意到以下重新打开的bug。正如我前面提到的,我实际上没有遇到这个bug,并且在OS X(Java 8 build 88)上为我显示了默认的JavaFX预加载程序,因此我不确定在什么情况下可能会遇到这样的bug,但可能需要注意一些事情。谢谢,我来看看。>“你怎么知道JAR下载需要时间?”我可以在Wireshark中看到。“JavaFX系统附带了一个默认的预加载程序”是的,我记得我们有一段时间这样做了,我想这是在我们添加了对回复中的注释的响应之前。我遇到了一个类似的问题,默认的JavaFX预加载程序在JAR的下载阶段没有显示出来。我不确定它是否与同一个bug有关。在我的设置中,我在Netbeans 8.1中创建了一个JavaFX预加载程序项目,并将其添加到我的主项目(使用Maven)。问题链接:谢谢,我来读一下。>“你怎么知道JAR下载需要时间?”我可以在Wireshark中看到。“JavaFX系统附带了一个默认的预加载程序”是的,我记得我们有一段时间这样做了,我想这是在我们添加了对回复中的注释的响应之前。我遇到了一个类似的问题,默认的JavaFX预加载程序在JAR的下载阶段没有显示出来。我不确定它是否与同一个bug有关。在我的设置中,我在Netbeans 8.1中创建了一个JavaFX预加载程序项目,并将其添加到我的主项目(使用Maven)。链接t