2013-02-28 24 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