10

私の IDE は Eclipse で、私のプロジェクトはスタンドアロンの JavaFX アプリケーション (OSGI フレームワークを使用した純粋な CS アーキテクチャ) です。

プリローダーを使用する方法、プリローダーはメインアプリケーションの前に開始され、後で非表示になりますか?

ここでいくつかのコードを見つけました:

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();
    }
}
4

2 に答える 2

34

これは長い答えです。せっかちな人のための簡単な答えは、集中的なスタートアップタスクのスプラッシュページを表示するためのこのサンプルコードをダウンロードして、それがあなたの状況に適応できるかどうかを確認することです。


私の答えは、JavaFXのプリローダースタイルの機能に関する一般的な情報を提供します。あなたの質問Preloaderは、EclipseおよびOSGI環境での使用法について具体的に言及していますが、これらのテクノロジーを使用していないため、そのシナリオに直接対処することはしません。うまくいけば、一般的な情報はまだあなたのシナリオに適用可能です。

1. Javaは、Javaの起動時にスプラッシュページを表示するためのネイティブサポートを備えています。

  • これは、-splash:<image> VMスイッチを使用して機能します。

長所と短所:

+スタンドアロンアプリケーションにスプラッシュ画像を表示させる最も簡単な方法。

+非常にすばやく表示できます=>これはVMプロセスへの引数入力であるため、(おそらく)VM自体が完全に初期化される前でも表示できます。

-機能が制限されています=>画像の表示のみが許可され、初期化の進行状況のレポート、アニメーション、ログインプロンプトなどの他のプリローダー機能は許可されません(AWT APIを使用しない場合)

-Java 8まですべてのプラットフォームで動作しません(問題Mac:JavaFX2.2およびJDK7で-splashを使用できませんを参照)。

2.プリローダーはスタンドアロンアプリケーションに使用できます。

JavaFXプリローダーチュートリアルのセクションに例があります9.3.4 Using a Preloader to Display the Application Initialization ProgressLongInitAppPreloaderチュートリアルでは、およびクラスで実行可能なサンプルコードを提供していLongInitAppます(チュートリアルの1つの名前は現在間違っているため、この回答で提供するクラス名を使用してください)。

サンプルのスタンドアロンアプリケーションは初期化時間が長く、カスタムPreloaderは初期化の進行状況に関するフィードバックを提供します。このサンプルは、呼び出しを伴うタスクによる長い初期化をシミュレートしますが、実際のアプリケーションは、ネットワーク接続の確立、ネットワークデータの取得と解析、初期アプリケーションシーンThread.sleepのセットアップなどを実行します。

プリローダーはアプレットとWebStartに固有のものではありませんが、主にこれらのデプロイメントタイプを対象としています。アプレットとWebStartの初期化プロセスは、スタンドアロンアプリケーションの初期化よりも複雑であるため、プリローダーのドキュメントの多くは、これらのより複雑なシナリオに専念しています。

3.プリローダーを別のJARに配置する必要はありません。

をApplicationクラスPreloaderと同じJARに配置できます。WebStartなどのネットワークローディングプロトコルを介して動的に展開および更新される大規模なアプリケーションの場合、を別のJARに配置することは理にかなっています。ネットワークベースの初期化を実行するスタンドアロンアプリケーションの場合、おそらく大きな違いはなく、ビルドと展開のプロセスを簡素化するために、個別のパッケージ化手順をスキップできます。Preloader

4.プリローダーを使用せずにプリローダースタイルの機能を実現できます。

プリローダー機能の多く(すべてではない)は、プリローダーをサブクラス化せずに実現できます。

あなたはできる:

  1. アプリケーションのstartメソッドでスタートアップステージを作成します。
  2. スプラッシュイメージとProgressBarを起動段階に配置します。
  3. 長いアプリケーション初期化プロセスのバックグラウンドタスクがあります。
  4. 初期化の進行状況を、バックグラウンドタスクからスタートアップステージに報告します。
  5. 初期化が完了すると、次のいずれかが行われます。
    • a。スタートアップステージを新しく作成されたアプリケーションステージに置き換える、または
    • b。起動段階のシーンの内容を、アプリケーションの新しいシーンに置き換えます。

複数のウィンドウを作成する必要がないように、5bがおそらく推奨されます。

この戦略の例については、次の質問に対する私の回答を参照してください。

を使用せずにJavaFXで進行状況監視スプラッシュ画面を表示するための関連サンプルコードPreloaderは次のとおりです。

上記のコードは、代わりにプリローダーサブクラスを使用するようにリファクタリングできます。その場合、アプリケーション初期化イベントの通知用に明確に定義されたフレームワークがあり、より柔軟なデプロイメントモデル(別のjarのプリローダーなど)を利用できます。ただし、aの使用はPreloader少し複雑な場合があります。一部の実装では、フレームワークを理解する価値がない場合がありますPreloader

5. WebStartアプリは、スプラッシュイメージのJNLPをサポートしています

(この点はまったく無関係であり、完全を期すために含まれています)。

Webstartアプリケーションはjnlpファイルにフラグを設定して、WebStartアプリケーションの起動時にスタートアップイメージを表示できると思いますが、JavaFX 2アプリケーションでそのフラグを機能させることはできませんでしたが、Swingアプリケーションでのみ機能します。その後、アプリケーションが2回起動されたときにのみ表示されるため、それほど信頼性は高くありませんでした。

于 2013-03-01T00:57:09.360 に答える