我在写一个使用外部资源文件的java swing应用程序。
许多资源文件只需要加载某些选择。
进行选择后,第一个窗口关闭,适当的外部资源被加载,另一个窗口打开并显示资源。 如何为中程序加载创建第二个启动画面?
第一个窗口有一个启动画面来覆盖加载时间。
我怎样才能让第二个窗口有类似的东西?
我所看到的内容涉及在同一个窗口中发生的任务,这对于此项目不可行,并且Java的内置启动画面不会再次启动(SplashScreen.getSplashScreen返回null)。
我在写一个使用外部资源文件的java swing应用程序。
许多资源文件只需要加载某些选择。
进行选择后,第一个窗口关闭,适当的外部资源被加载,另一个窗口打开并显示资源。 如何为中程序加载创建第二个启动画面?
第一个窗口有一个启动画面来覆盖加载时间。
我怎样才能让第二个窗口有类似的东西?
我所看到的内容涉及在同一个窗口中发生的任务,这对于此项目不可行,并且Java的内置启动画面不会再次启动(SplashScreen.getSplashScreen返回null)。
而不是使用SplashScreen
API,您可以简单地创建自己的JWindow
。
为此,您可以添加一堆组件以提供所需的功能(例如,背景为JLabel
,消息为JLabel
),并在加载资源时使其可见。
当你完成后,你可以简单地处理窗口。
另外,请确保您正在执行您在后台线程中加载的所有内容。 SwingWorker
将有利于这一目的,恕我直言
This answer演示概念,寻求第二个例子......
谢谢你的建议。您链接的答案比使用SwingWorker的建议更有帮助,但SwingWorker完美运行。 – falconflicker
至少“有所帮助”;) – MadProgrammer
在OtrosLogViewer我显示MANIFEST.MF首先定义启动画面。当应用程序加载时,我根据加载进度渲染新的splashscreen。 OtrosSplah.java正在调用方法渲染重绘飞溅:
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的第一个启动画面,然后绘制新画面。
[Connect JProgressBar with download process](http://stackoverflow.com/questions/9420778/connect-jprogressbar-with-download-process) –