我正在编写一个使用外部资源文件的java swing应用程序。
许多资源文件仅在加载某些选择时是必需的。
在进行选择时,第一个窗口关闭,加载适当的外部资源,并打开另一个带有资源的窗口。
第一个窗口有一个启动画面来覆盖加载时间。
如何让第二个窗口有类似的东西?
我所看到的涉及在同一个窗口中发生的任务,这对于该项目是不可行的,并且Java的内置启动画面不会再次启动(SplashScreen.getSplashScreen返回null)。
答案 0 :(得分:2)
在OtrosLogViewer中,我显示MANIFEST.MF中定义的第一个启动画面。加载应用程序时,我会根据加载进度渲染新的启动画面。 OtrosSplah.java调用方法渲染来重绘splash:
private static void render() {
SplashScreen splashScreen = SplashScreen.getSplashScreen();
if (splashScreen == null) {
return;
}
Graphics2D g = splashScreen.createGraphics();
if (g == null) {
return;
}
if (version == null) {
try {
version = VersionUtil.getRunningVersion();
} catch (IOException e) {
version = "?";
}
version = "Version: " + version;
}
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setComposite(AlphaComposite.Clear);
Rectangle bounds = splashScreen.getBounds();
g.fillRect(0, 0, bounds.width, bounds.height);
g.setPaintMode();
g.setColor(Color.BLACK);
g.setFont(g.getFont().deriveFont(14f));
g.drawString(message, 20, 110);
g.drawString(version, 20, 130);
splashScreen.update();
}
你也可以这样做。从MANIFEST.MF显示第一个启动画面,然后再绘制新的启动画面。
答案 1 :(得分:1)
您可以简单地创建一个SplashScreen
,而不是使用JWindow
API。
在这里你可以添加一堆组件来提供你需要的功能(即背景为JLabel
,消息为JLabel
,并在加载时使其可见你的资源。
完成后,您只需处理窗口即可。
另外,请确保您在后台线程中执行所有加载操作。 SwingWorker
对于这个目的是好的,恕我直言
This answer演示了这个概念,寻找第二个例子......