我们的maven / Netbeans平台应用程序在启动时使用自定义映像,替换
Nbm-branding> core.jar> org.netbeans.core.startup> splash.gif
我尝试将其设为动画.gif,但只显示第一帧。
如何通过运行一些JavaFX窗口动画来实现动画启动画面?
我见过another other SO question,但没有真正回答 - 请注意我在询问如何将自定义初始屏幕与我的Netbeans平台应用程序集成,而不是如何实际构建它。
答案 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平台代码。
希望你觉得这很有用!