我正在编写一个使用外部资源文件的 java swing 应用程序。
许多资源文件只需要加载某些选择。
进行选择后,第一个窗口关闭,加载适当的外部资源,并打开另一个窗口,其中包含这些资源。
第一个窗口有一个启动屏幕来覆盖加载时间。
我怎样才能让第二个窗口有类似的东西?
我所看到的涉及在同一窗口中发生的任务,这对于该项目是不可行的,并且 Java 的内置启动屏幕不会第二次启动(SplashScreen.getSplashScreen 返回 null)。
在OtrosLogViewer 中,我显示在MANIFEST.MF中定义的第一个启动画面。加载应用程序时,我会根据加载进度呈现新的启动画面。OtrosSplah.java正在调用方法 render 来重绘飞溅:
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 的第一个初始屏幕,然后绘制新屏幕。
您SplashScreen
可以简单地为自己创建一个JWindow
.
您可以在其中添加一堆组件来提供您需要的功能(即,一个JLabel
用于背景,一个JLabel
用于消息)并在您加载资源时使其可见。
完成后,您可以简单地处理窗口。
另外,请确保您在后台线程中执行所有加载。 SwingWorker
对这个目的有好处,恕我直言
这个答案演示了这个概念,寻找第二个例子......