Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过JavaWebStart进行JavaFX部署-加载进度条_Java_Deployment_Progress Bar_Javafx_Java Web Start - Fatal编程技术网

通过JavaWebStart进行JavaFX部署-加载进度条

通过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

我的应用程序是由JavaWS部署的,但在用户单击JNLP后,会有一个长时间的暂停,似乎什么都没有发生,然后应用程序会弹出屏幕。JavaWS正在后台下载所有jar,但是没有进度指示,这非常糟糕。所以我开始构建一个自定义的:

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