Анимированный экран-заставка в приложении Netbeans Platform - PullRequest
5 голосов
/ 17 февраля 2012

Наше приложение на платформе maven / Netbeans использует собственный образ при запуске, заменив

Nbm-брендинг> core.jar> org.netbeans.core.startup> splash.gif

Я пытался сделать его анимированным .gif, но отображается только первый кадр.

Как можно реализовать анимированный экран-заставку, возможно, запустив некоторые анимации окон JavaFX?

Я видел другой другой SO вопрос , но на него не было ответа - пожалуйста, обратите внимание, я спрашиваю о , как интегрировать пользовательский экран-заставку с моим приложением на платформе Netbeans а не как на самом деле его построить.

Ответы [ 2 ]

2 голосов
/ 21 февраля 2012

Удивительно, но я узнал, как подключить настраиваемый экран-заставку на основе этого поста об аутентификации и авторизации пользователей .

По сути, нужно написать еще один класс запуска.вместо платформы по умолчанию:

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папка.

1 голос
/ 19 февраля 2012

Текущую версию класса NetBeans, отвечающего за рендеринг заставки, можно посмотреть онлайн здесь: org.netbeans.core.startup .

Код виновника, который предотвращаетgif от анимации - это строка (строка 546)

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

. Для того, чтобы анимировать gif, необходимо указать ImageObserver вместо того, чтобы быть установленным на null, и тогда перерисовка должна быть вызвана, когдаimageUpdate() вызывается для ImageObserver.

Пример отображения анимированного GIF можно посмотреть здесь: Взаимосвязь между анимированным GIF и Image Observer

Так какНасколько я понимаю, вам придется либо изменить приведенный выше код платформы NetBeans и перестроить его для своего приложения, либо вам придется создать собственный заставочный экран с нуля, чтобы использовать его вместо NetBeans.

Надеюсь, что вынайти это полезным!

...