如何在Eclipse中使用javaFX Preloader和独立应用程序?

时间:2013-02-28 02:04:12

标签: eclipse osgi javafx preloader

我的IDE是eclipse,我的项目是一个独立的javaFX应用程序(带有OSGI框架的纯CS架构)。

如何使用预加载器,因此预加载器将在我的主应用程序之前启动并稍后隐藏?

我找到了一些代码 http://docs.oracle.com/javafx/2/deployment/preloaders.htm#BABGGDJG

但我仍然不知道如何在OSGI框架中使用我的启动应用程序部署Preloader。 我在下面给出了一些启动应用程序的代码:

public class MyPrjMain extends Application {
    private static Stage primaryStage;

    public void start(final Stage stage) throws BusinessException {
        primaryStage = stage;

        init(primaryStage);

        primaryStage.show();
    }
}

非常感谢大家。

2 个答案:

答案 0 :(得分:29)

这是一个很长的答案,对于不耐烦的快速回答是下载此sample code for displaying a splash page for an intensive startup task并查看它是否适合您的情况。


我的回答提供了有关JavaFX中Preloader样式功能的一般信息。您的问题特别提到了Eclipse和OSGI环境中的Preloader用法,但由于我不使用这些技术,因此我不会直接解决该问题。希望一般信息仍然适用于您的场景。

<强> 1。 Java具有在Java启动时显示启动页面的原生支持。

  • 这可以使用-splash:<image> VM switch

优点和缺点:

+让独立应用程序显示启动图像的最简单方法。

+可以很快显示    =&GT;它是VM进程的参数输入,因此(可能)它甚至可以在VM本身完全初始化之前显示。

-功能有限    =&GT;只允许显示图像,而不是其他预加载器功能,如报告初始化进度,动画,登录提示等(除非你make use of AWT APIs

-在Java 8之前无法在所有平台上运行(请参阅问题Mac: Impossible to use -splash: with JavaFX 2.2 and JDK 7)。

<强> 2。预加载器可用于独立应用程序。

JavaFX Preloader tutorial9.3.4 Using a Preloader to Display the Application Initialization Progress部分中有一个示例。本教程提供了LongInitAppPreloaderLongInitApp类中的可执行示例代码(使用我在本答案中提供的类名,因为教程中的一个名称当前是错误的。)

示例独立应用程序具有较长的初始化时间,而自定义Preloader提供有关初始化进度的反馈。该示例通过带有Thread.sleep调用的Task模拟长初始化,但真正的应用程序将执行诸如建立网络连接,检索和解析网络数据以及设置初始应用程序{{3} }。

预加载器并非特定于applet和WebStart,但主要针对这些部署类型。 applet和WebStart初始化过程比独立应用程序初始化更复杂,因此Preloader的大部分文档都专门用于那些更复杂的场景。

第3。您不需要将Preloader放在单独的JAR中。

您可以将Preloader放在与Scene班级相同的JAR中。对于通过网络加载协议(例如Application)动态部署和更新的大型应用程序,将Preloader置于单独的JAR中是有意义的。对于执行基于网络的初始化的独立应用程序,它可能没有太大区别,可以跳过单独的打包步骤来简化构建和部署过程。

<强> 4。您可以在不使用预加载器的情况下实现Preloader样式功能。

在没有子类化WebStart的情况下,可以实现很多(并非所有)预加载器功能。

你可以:

  1. 在应用程序的Preloader方法中创建启动Stage
  2. 在启动阶段放置一个启动图像和start
  3. 为冗长的应用程序初始化过程设置后台ProgressBar
  4. 从后台任务将初始化进度报告回启动阶段。
  5. 在初始化完成时,要么:
    • 一个。用新创建的应用程序阶段或
    • 替换启动阶段
    • 湾使用应用程序的新场景替换启动阶段中场景的内容。
  6. 5b可能是首选,因此您无需创建多个窗口。

    有关此策略的示例,请参阅我对以下问题的回答:

    在不使用Preloader的情况下在JavaFX中显示Progress Monitoring启动画面的相关示例代码是:

    上面的代码可以重构为使用Preloader子类,在这种情况下,有一个定义良好的框架用于通知应用程序初始化事件,并且可以使用更灵活的部署模型(例如,单独jar中的预加载器)。但是使用Preloader可能有点复杂。对于某些实现,可能不值得花时间理解Preloader框架。

    <强> 5。 WebStart Apps具有对Splash Images的JNLP支持

    (这一点非常无关紧要,只是为了完整性而包括在内)。

    我相信JavaFX standalone application Splash Page for a great website可以在启动webstart应用程序时显示启动图像,但是我从来没有能够在JavaFX 2应用程序中使用该标志,只能在Swing应用程序中使用它,即便如此并不是那么可靠,因为它只会显示应用程序第二次启动。

答案 1 :(得分:1)

恕我直言Preloader仅在您作为applet或webstart运行时才有意义,因为预加载器可以打包为一个额外的Jar,它会先下载并在后台下载其他应用程序时执行。

所以我的建议是在你获得舞台的第一个时间点开一个舞台,例如显示一个飞溅。

相关问题