NetBeansプラットフォームアプリのアニメーションスプラッシュ画面
-
27-10-2019 - |
質問
Maven/NetBeansプラットフォームアプリケーションは、交換することにより、起動時にカスタム画像を使用しています
nbm-branding> core.jar> org.netbeans.core.startup> splash.gif
アニメーション化された.gifにしてみましたが、最初のフレームのみが表示されます。
Javafxウィンドウアニメーションを実行することで、アニメーション化されたスプラッシュ画面を実装するにはどうすればよいでしょうか?
私は見た 別の他のSO質問, 、しかし、それは本当に答えられていませんでした - 私が尋ねていることに気づきます カスタムスプラッシュ画面をNetBeansプラットフォームアプリケーションと統合する方法, 、そして実際にそれを構築する方法ではありません。
解決
驚くべきことに、私はに基づいてカスタムスプラッシュ画面を接続する方法を見つけました ユーザーの認証と承認に関するこの投稿.
基本的に、プラットフォームのデフォルトではなく、別のスタートアップクラスを作成する必要があります。
import java.lang.reflect.Method;
public class CustomStartup {
private static final String NB_MAIN_CLASS = "org.netbeans.core.startup.Main";
public static void main(String[] args) throws Exception {
// do whatever you need here (e.g. show a custom login form)
System.out.println("Hello world! I am a custom startup class");
JWindow splash = initSplash();
// once you're done with that, hand control back to NetBeans
ClassLoader classloader = Thread.currentThread().getContextClassLoader();
Class<?> mainClass = Class.forName(NB_MAIN_CLASS, true, classloader);
Object mainObject = mainClass.newInstance();
Method mainMethod = mainClass.getDeclaredMethod("main", new Class[]{String[].class});
mainMethod.invoke(mainObject, (Object) args);
splash.setVisible(false);
}
}
そのクラスでは、Javafxステージを作成し、 JWindow
, 、そしてそれを示します:
public JWindow initSplash(){
JWindow window = new JWindow();
final JFXPanel fxPanel = new JFXPanel();
window.add(fxPanel);
window.setVisible(true);
window.setLocationRelativeTo(null);
Platform.runLater(new Runnable() {
@Override
public void run() {
Scene scene = new Scene(new CustomFxSplash(), 475, 300, true);
fxPanel.setScene(scene);
}
}
return window;
}
覚えておくべき他のことは次のとおりです。
アプリを実行して、元のNetBeansスプラッシュ画面を抑制します
--nosplash
パラメーター。でアプリを実行して、カスタム初期化クラスに電話してください
-J-Dnetbeans.mainclass=com.package.splash.CustomStartup
パラメーターとして リンクが示唆しています このカスタムクラスは、プラットフォームの初期化クラスパスにある必要があります。
platform/core
フォルダ。
他のヒント
スプラッシュ画面のレンダリングを担当するNetBeansクラスの現在のバージョンは、ここでオンラインで表示できます。 org.netbeans.core.startup.
GIFがアニメーション化するのを防ぐ犯人コードはこの行です(行546)
graphics.drawImage(image, 0, 0, null);
GIFがアニメーション化するために ImageObserver
設定する代わりに指定する必要があります null
そして、塗り直しをいつ呼び出す必要があります imageUpdate()
に呼ばれます ImageObserver
.
アニメーションGIFを表示する例は、ここで表示できます。 アニメーションGIFと画像オブザーバーの関係
私が見る限り、あなたは上記のNetBeansプラットフォームコードを変更し、アプリケーションのためにそれを再構築する必要があるか、NetBeansのものではなく使用するために独自のスプラッシュ画面をゼロから作成する必要があります。
これが便利だと思うことを願っています!