2013-10-15 23 views
0

我在写一个使用外部资源文件的java swing应用程序。
许多资源文件只需要加载某些选择。
进行选择后,第一个窗口关闭,适当的外部资源被加载,另一个窗口打开并显示资源。 如何为中程序加载创建第二个启动画面?

第一个窗口有一个启动画面来覆盖加载时间。
我怎样才能让第二个窗口有类似的东西?
我所看到的内容涉及在同一个窗口中发生的任务,这对于此项目不可行,并且Java的内置启动画面不会再次启动(SplashScreen.getSplashScreen返回null)。

+1

[Connect JProgressBar with download process](http://stackoverflow.com/questions/9420778/connect-jprogressbar-with-download-process) –

回答

1

而不是使用SplashScreen API,您可以简单地创建自己的JWindow

为此,您可以添加一堆组件以提供所需的功能(例如,背景为JLabel,消息为JLabel),并在加载资源时使其可见。

当你完成后,你可以简单地处理窗口。

另外,请确保您正在执行您在后台线程中加载的所有内容。 SwingWorker将有利于这一目的,恕我直言

This answer演示概念,寻求第二个例子......

+0

谢谢你的建议。您链接的答案比使用SwingWorker的建议更有帮助,但SwingWorker完美运行。 – falconflicker

+0

至少“有所帮助”;) – MadProgrammer

2

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的第一个启动画面,然后绘制新画面。