2017-05-26 21 views
2

我已經在OS X Sierra下編寫了一個SWT應用程序,需要一點時間才能啓動,所以我想添加一個啓動畫面來清除正在發生的事情。 SplashScreen-Image:property in the Java Manifest file似乎完全適合這一點。這適用於顯示啓動屏幕圖像的程度,但問題是在應用程序主窗口最終出現後圖像從不消失。我已嘗試添加在SWT中使用SplashScreen-Image時,如何讓Java啓動畫面消失?

final SplashScreen splash = SplashScreen.getSplashScreen(); 
    if (splash != null) { 
     splash.close(); 
    } 

在調度循環開始之前,仍然可看到飛濺圖像。 Oracle demo codethe SplashScreen classclass documentation都沒有提供任何有用的指導(恕我直言)關於我應該做些什麼。

如何飛濺圖像應該被解散或刪除?我可能做錯了什麼?

+0

這看起來很像[這個問題](https://stackoverflow.com/q/21022788/2670892) –

+0

@ greg-449你是對的;這是完全一樣的問題。我在發佈之前做過搜索,但顯然做得不好。我很抱歉。感謝您發現 - 閱讀其他問題的討論非常有幫助。 – mhucka

+0

這應該作爲一個重複關閉? – mhucka

回答

1

我有使用虛擬機的參數定義閃屏的應用:

javaw -splash:splash.png ...other params here... 

啓動畫面消失時,自動將第一JFrame的設置爲可見。

也許這不是一個解決您的具體問題,但也許你可以採用這種方法使其工作。

至於你的解決方案,我有一個閃屏上的OS X塞拉利昂沒有經驗,沒有在清單文件中定義的,但你肯定的是,此行調用splash.close();真正執行?你是一步一步調試這個代碼嗎?

+0

我想''splash.close()'調用正在執行,但事實證明它不是:代碼恰好在調用之前花了這麼長時間,我沒有意識到它從來沒有把它做到'splash.close )' - 我只是假定它一定是。現在我修復了'splash.close()'確實被調用的事實,它將掛起整個應用程序!我最好的猜測是SplashScreen AWT類不適用於SWT。 – mhucka

+0

另一方面,使用'-splash'命令行參數以同樣的方式顯示啓動畫面PNG圖像:它出現,但從不消失。我不知道爲什麼這種行爲對我來說是不同的,但它可能是OS X的差異,也可能是我使用SWT的事實,或者其他一些尚未確定的因素。 – mhucka

+0

您可以使用未修飾的JFrame自行創建啓動畫面,並在初始化之前顯示它,然後在初始化後關閉它 - 但是它會在VM啓動後顯示 - 幾秒鐘,但總比沒有好。您也可以在JVM中提交錯誤,也可以嘗試使用其他版本的JVM。 –