2013-10-15 34 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的第一個啓動畫面,然後繪製新畫面。