2013-02-28 78 views
7

我的IDE是eclipse,我的项目是一个独立的javaFX应用程序(带有OSGI框架的纯CS架构)。如何在Eclipse中将javaFX Preloader与独立应用程序结合使用?

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

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

但我仍然不知道如何将预载在一个OSGi框架我启动的应用程序部署。 我给我下面的启动应用程序的一些代码:

public class MyPrjMain extends Application { 
    private static Stage primaryStage; 

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

     init(primaryStage); 

     primaryStage.show(); 
    } 
} 

非常感谢大家。

+0

有谁支持? – 2013-02-28 06:22:29

回答

25

这是一个很长的答案,急躁的快速答案是下载这个sample code for displaying a splash page for an intensive startup task,看看它是否适合您的情况。


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

1.当启动Java时,Java对本机支持显示启动页面。

  • 这个工程使用-splash:<image>VM switch

优缺点:

+让你独立的应用程序来显示闪现图像的最简单方法。

+可以非常快速地显示 =>它是虚拟机进程的参数输入,所以(大概)它可以在虚拟机本身完全初始化之前显示。

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

-将无法​​在所有工作平台直到Java 8(请参阅问题Mac: Impossible to use -splash: with JavaFX 2.2 and JDK 7)。

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

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

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

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

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

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

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

预加载器功能的很多(不是全部)功能可以在没有继承Preloader的情况下实现。

您可以:

  1. 创建应用程序的方法start启动Stage
  2. 在启动阶段放置一个闪屏图像和ProgressBar
  3. 对于冗长的应用程序初始化过程,有一个背景task
  4. 从后台任务报告初始化进度到您的启动阶段。
  5. 在初始化完成时,要么:
    • a。 b。用新创建的应用程序阶段替换启动阶段或
    • b。将启动阶段的场景内容替换为应用程序的新场景。

5B可能是首选,这样你就不需要创建多个窗口。

对于这一战略的例子,看到我的回答以下问题:

显示进度监控闪屏JavaFX中不使用的相关示例代码Preloader是:

上面的代码可以被重构为使用预加载的子类,而不是,在这种情况下,存在用于应用程序的初始化事件和更灵活的部署模式通知良好限定的框架(例如preloader在单独的罐子里)可用。然而使用Preloader可能有点复杂。对于某些实现,可能不值得花时间了解框架。

5. Webstart的应用程序有飞溅图片

JNLP的支持(这一点是相当无关,只是为了保持完整性)。

我相信webstart applications can have a flag in their jnlp file显示启动图像作为Webstart的应用程序启动,但我从来没有能够获得该标志在一个JavaFX 2应用程序的工作,只有在一个Swing应用程序,即使这样它不是所有这些都是可靠的,因为它只会在应用程序第二次启动时显示。

+0

非常感谢,非常精致。 – 2013-03-01 02:05:01

+0

OSGi中的问题在于,你并没有从自己的Jar开始,而是启动了OSGi-System。 我认为最好的解决方案是结合Java-Splash和你自己的启动阶段。我仍然相信Preloader的主要目的是一直是Applet/Webstart用例。 – tomsontom 2013-03-01 08:01:08

0

恕我直言,只有当您作为applet或webstart运行时,preloader才有意义,因为preloader可以打包为一个额外的jar,首先下载并在后台下载其他应用程序时执行。

所以我的建议是在第一个时间点开始舞台,显示一个飞溅。

+0

感谢tomsontom,你的意思是Preloader不是用于独立的javaFX应用程序,而是仅用于“applet或webstart”?我必须通过舞台来实施“飞溅”? Jface有一个用于Splash页面的AbstractSplashHandler,它真的很好... – 2013-02-28 10:59:03

+0

是的,但是,但是如果需要交互性,我会使用Javas自己的支持来显示飞溅图像并将其替换为舞台 - 我也认为本机包装者具有飞溅屏幕支持!您不应该使用Eclipse Launcher和Splash的东西,因为这是例如在mac上导致JavaFX启动失败。我将在接下来的几周看一下客户的飞溅情况,因此您很快会看到e(fx)clipse代码库中的类,这样您可以轻松访问它。 – tomsontom 2013-02-28 18:00:04

+0

我将在接下来的几周看一下客户的飞溅情况,因此您很快会在e(fx)剪辑代码库中看到类,这样您就可以轻松访问它。 ---等待你的恶作剧新闻。 :) 谢谢! – 2013-03-07 14:40:52

相关问题