5

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

Nbm 品牌 > core.jar > org.netbeans.core.startup > splash.gif

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

可能通过运行一些 JavaFX 窗口动画来实现动画闪屏?

我看到了另一个 SO question,但没有真正回答 - 请注意我问的是如何将自定义启动屏幕与我的 Netbeans 平台应用程序集成,而不是如何实际构建它。

4

2 回答 2

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

在该类中,可以创建一个 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文件夹内。

于 2012-02-21T14:50:26.723 回答
1

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

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

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

为了使 gif 动画化ImageObserver,必须指定 will 而不是设置为null,然后在imageUpdate()调用ImageObserver.

可以在此处查看显示动画 gif 的示例:动画 Gif 和图像观察者之间的关系

因此,据我所知,您要么必须更改上述 NetBeans 平台代码并为您的应用程序重新构建它,要么必须从头开始创建自己的启动屏幕来代替 NetBeans 使用。

希望你觉得这个有用!

于 2012-02-19T17:00:36.317 回答