2017-11-28 3 views
3
Iは、以下の方法使用プリローダとJavaFXアプリケーションを起動できるJava 8で

ジャワ9 JavaFXのプリローダー

LauncherImpl.launchApplication(WindowMain.class, WindowMainPreloader.class, 
new String[]{...}); 

Iのような、上記のコードから起動することを好むが、代わりにデプロイ構成を使用して、なぜなら私はアプリケーションを起動するたびにグラフィカルインターフェイスを起動するのではなく、GUIモードでアプリケーションを実行する必要があると計算したコードの後に​​のみ起動します。

"com.sun.javafx.application.LauncherImpl"クラスを使用していましたが、明らかにJava 9では "com.sun"で始まるすべてのクラスが削除されています。では、Java 9のプリローダーを使ってアプリケーションをどのように起動できますか?

答えて

4

この質問への答えにコメントがあります:

How to create splash screen as a Preloader in JavaFX standalone application?

システムプロパティjavafx.preloader=classnameはあまりにも動作するようです。

私はそれを試していないが、おそらくあなたは、そのプロパティを設定し、ちょうど公共Application.launch(appClass, args) APIを介して、あなたのメインのアプリを起動してみてください可能性があり、おそらくプリローダーが最初に起動します。

Application.launchのコードを見ると、これはうまくいくようです。ここでのJava 8のソースからコピー最終的に呼び出されたコードは、次のとおりです。

public static void launchApplication(final Class<? extends Application> appClass, 
     final String[] args) { 

    Class<? extends Preloader> preloaderClass = savedPreloaderClass; 

    if (preloaderClass == null) { 
     String preloaderByProperty = AccessController.doPrivileged((PrivilegedAction<String>)() -> 
       System.getProperty("javafx.preloader")); 
     if (preloaderByProperty != null) { 
      try { 
       preloaderClass = (Class<? extends Preloader>) Class.forName(preloaderByProperty, 
         false, appClass.getClassLoader()); 
      } catch (Exception e) { 
       System.err.printf("Could not load preloader class '" + preloaderByProperty + 
         "', continuing without preloader."); 
       e.printStackTrace(); 
      } 
     } 
    } 

    launchApplication(appClass, preloaderClass, args); 
} 

あなたが使用してプリローダーでアプリを起動することができるはずです。

System.setProperty("javafx.preloader", "my fully qualified preloader class name"); 
Application.launch(myMainClass, args);