OK,這咬我。
我建了一個可運行的jar 與清單項
SplashScreen-Image: MyGraphic.jpg
和它的作品,因爲它是應該。
在Eclipse中,指定VM ARG作爲
-splash:MyGraphic.jpg
沒有這樣的運氣
SplashScreen.getSplashScreen()返回null。
原因是JDK中的SplashScreen.getSplashScreen()至少是1.6的死腦實現。我認爲。如果沒有深入瞭解本機代碼的功能,很難分辨出來。但是,這裏是來自java.awt.SplashScreen的這個方法。我不知道這是否就是所謂的,但研究它沒有向我提供了重要的線索,我需要在Eclipse中得到這個工作:
public synchronized URL getImageURL() throws IllegalStateException {
checkVisible();
if (imageURL == null) {
try {
String fileName = _getImageFileName(splashPtr);
String jarName = _getImageJarName(splashPtr);
if (fileName != null) {
if (jarName != null) {
imageURL = new URL("jar:"+(new File(jarName).toURL().toString())+"!/"+fileName);
} else {
imageURL = new File(fileName).toURL();
}
}
}
catch(java.net.MalformedURLException e) {
// we'll just return null in this case
}
}
return imageURL;
}
注意,在文件的情況下(即命令行,而不是罐子啓動)它沒有執行getResource()來獲取URL,而是打開一個相對於CWD的文件。由於Eclipse運行配置默認從項目的根目錄運行,因此答案是將路徑指定爲相對路徑,而不是期望類路徑查找。
因此,由於我使用maven構建,因此我的映像位於src/main/resources/MyGraphic.jpg。指定此作爲命令行參數:即
-splash:src/main/resources/MyGraphic.jpg
允許它在Eclipse中工作(或者,我想,任何命令行)
我不知道這是爲什麼,因爲getImageURL方法不被getSplashScreen()調用,但它工作。
對我來說,這是Sun/Oracle部分的大腦死亡。他們可以很容易地做一個類似於 的類路徑查找imageURL = getResource(filename),但他們沒有。
簡短的回答是,啓動畫面命令行語法引用的是相對於當前工作目錄的文件名,而不是相對於類路徑。
有你在_run Configuration_試圖_VM Arguments_? – trashgod
是的,我試過從那裏傳遞參數。看來問題在於-splash:image參數依賴於位於同一個目錄下的文件,我試圖將該圖像包含在Jar文件中。 – will824
對不起,我誤讀了。您也可以嘗試此[實用程序](http://sites.google.com/site/drjohnbmatthews/manifesto)來驗證「SplashScreen-Image」屬性。 – trashgod