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

时间:2012-02-17 09:41:40

标签: java netbeans splash-screen netbeans-7 netbeans-platform

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

  

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

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

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

我见过another other SO question,但没有真正回答 - 请注意我在询问如何将自定义初始屏幕与我的Netbeans平台应用程序集成,而不是如何实际构建它。

2 个答案:

答案 0 :(得分:2)

令人惊讶的是,我发现了如何根据this post about user authentication and authorization插入自定义初始屏幕。

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

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;
}

要记住的其他事项是:

  • 通过使用--nosplash参数运行您的应用来取消原始NetBeans初始屏幕。

  • 通过使用-J-Dnetbeans.mainclass=com.package.splash.CustomStartup参数

  • 运行您的应用来调用您的自定义初始化类
  • 由于link suggests此自定义类必须位于平台的初始化类路径中,这意味着在platform/core文件夹中。

答案 1 :(得分:1)

负责呈现初始屏幕的NetBeans类的当前版本可在此处在线查看:org.netbeans.core.startup

阻止gif动画的罪魁祸首是这一行(第546行)

graphics.drawImage(image, 0, 0, null);

为了使gif动画化,必须指定ImageObserver而不是设置为null,然后在{{1}上调用imageUpdate()时必须调用重绘}}

可以在此处查看显示动画gif的示例:Relationship Between Animated Gif and Image Observer

因此,据我所知,您将不得不更改上述NetBeans平台代码并为您的应用程序重建它,或者您必须从头开始创建自己的启动屏幕而不是NetBeans平台代码。

希望你觉得这很有用!