Netbeans平台应用程序上的动画启动画面

Mar*_*elo 5 java netbeans splash-screen netbeans-platform netbeans-7

我们的maven/Netbeans平台应用程序在启动时使用自定义映像,通过替换

Nbm-branding> core.jar> org.netbeans.core.startup> splash.gif

我尝试将其设为动画.gif,但只显示第一帧.

如何通过运行一些JavaFX窗口动画来实现动画启动画面?

我已经看到了另一个其他问题,但它没有得到真正的回答 - 请注意我问的是如何将自定义初始屏幕与我的Netbeans平台应用程序集成,而不是如何实际构建它.

Mar*_*elo 2

令人惊讶的是,我根据这篇关于用户身份验证和授权的文章找到了如何插入自定义启动屏幕。

基本上,需要编写另一个启动类,而不是平台的默认启动类:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

在该类中,可以创建一个 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;
}
Run Code Online (Sandbox Code Playgroud)

其他需要记住的事情是:

  • 通过使用参数运行应用程序来抑制原始 NetBeans 启动屏幕--nosplash。

  • -J-Dnetbeans.mainclass=com.package.splash.CustomStartup通过使用参数运行应用程序来调用自定义初始化类

  • 正如链接所示,这个自定义类必须位于平台的初始化类路径上,即在platform/core文件夹内。