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

Keo*_*ang 9 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

非常感谢大家.

jew*_*sea 31

这是一个很长的答案,不耐烦的快速答案是下载此示例代码以显示密集启动任务的启动页面,并查看它是否适合您的情况.


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

1. Java支持在Java启动时显示启动页面.

  • 这可以使用-splash:<image> VM开关.

的优点和缺点:

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

+ 可以非常快速地显示=>它是VM进程的参数输入,因此(可能)它甚至可以在VM本身完全初始化之前显示.

-具有有限的功能=>仅允许显示图像,而不是其他预加载器功能,如报告初始化进度,动画,登录提示等(除非您使用AWT API)

-在Java 8之前不能在所有平台上运行(请参阅Mac:不可能使用-splash:JavaFX 2.2和JDK 7).

2.预加载器可用于独立应用程序.

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

示例独立应用程序具有较长的初始化时间,并且自定义Preloader提供有关初始化进度的反馈.该示例通过带有调用的Task模拟长初始化Thread.sleep,但实际应用程序将执行诸如建立网络连接,检索和解析网络数据以及设置初始应用程序场景之类的操作.

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

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

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

4.您可以在不使用Preloader的情况下实现Preloader样式功能.

在没有子类化Preloader的情况下,可以实现很多(不是全部)预加载器功能.

您可以:

  1. 在应用程序的start方法中创建一个启动阶段.
  2. 在启动阶段放置一个启动图像和ProgressBar.
  3. 为冗长的应用程序初始化过程提供后台任务.
  4. 从后台任务将初始化进度报告回启动阶段.
  5. 在初始化完成时,要么:
    • 一个.用新创建的应用程序阶段OR替换启动阶段
    • 湾 使用应用程序的新场景替换启动阶段中场景的内容.

5b可能是首选,因此您不需要创建多个窗口.

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

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

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

5. WebStart Apps为Splash Images提供JNLP支持

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

我相信webstart应用程序可以在其jnlp文件中有一个标志,以便在webstart应用程序启动时显示启动图像,但我从来没有能够在JavaFX 2应用程序中使用该标志,仅在Swing应用程序中使用,甚至然后它不是那么可靠,因为它只会显示应用程序第二次启动.