我在寫一個使用外部資源文件的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) –