Вопрос

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

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

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

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

я видел другой другой вопрос, но на него на самом деле не было ответа - обратите внимание, пожалуйста, я спрашиваю о Как интегрировать пользовательский брызговой экран с приложением платформы 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, которая отвечает за рендеринг экрана Splash, можно просмотреть онлайн здесь: org.netbeans.core.startup.

Код виновника, который предотвращает анимирование GIF, является этой строкой (строка 546)

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

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

Пример отображения анимированного GIF можно посмотреть здесь: Отношения между анимированным GIF и изображением наблюдателя

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top