注意事項:使用getResource產生的URL作為讀取Jar內檔案的圖檔
1. URL要使用正斜線(/)作為目錄分隔
URL使用正斜線作為目錄分隔,所以若是用反斜線就會被當作名稱的一部份,這個問題會出現在Windows系統上,因為Windows是使用反斜線\作為目錄分隔符號。
若是使用反斜線,
在執行class時,URL會交由檔案系統解析,所以就「可能」讀取到圖檔(實際上我救是讀的到)。
但是執行jar時,URL是給URL相關的解析器,所以就把反斜線當作名稱的一部份,也就會找不到jar中圖片檔案。
2. 路徑上不要有驚嘆號(!)
在URL路徑中千萬不要包含驚嘆號(!) 因為這個符號是用來辨別jar檔案內的檔案用的,如果你取一個專案的資料夾名稱為 foo!! ,並將你的程式碼或jar放在裡面,你將會發現,執行jar檔案就是會發生錯誤,會說找不到檔案,但是當你把jar檔案移到一個不包含驚嘆號的目錄後,他就可以正常執行了。
因為在執行class時的URL列印出來是長這樣子
今天遭遇了第二個問題,又讓我搞了一陣子JarImageFetcher。
URL使用正斜線作為目錄分隔,所以若是用反斜線就會被當作名稱的一部份,這個問題會出現在Windows系統上,因為Windows是使用反斜線\作為目錄分隔符號。
若是使用反斜線,
在執行class時,URL會交由檔案系統解析,所以就「可能」讀取到圖檔(實際上我救是讀的到)。
但是執行jar時,URL是給URL相關的解析器,所以就把反斜線當作名稱的一部份,也就會找不到jar中圖片檔案。
2. 路徑上不要有驚嘆號(!)
在URL路徑中千萬不要包含驚嘆號(!) 因為這個符號是用來辨別jar檔案內的檔案用的,如果你取一個專案的資料夾名稱為 foo!! ,並將你的程式碼或jar放在裡面,你將會發現,執行jar檔案就是會發生錯誤,會說找不到檔案,但是當你把jar檔案移到一個不包含驚嘆號的目錄後,他就可以正常執行了。
因為在執行class時的URL列印出來是長這樣子
file:/{路徑名稱}/foo!!/foo.class/{圖片路徑}而執行jar檔案時,URL列印出來會是這個樣子
jar:file:/{路徑名稱}/foo!!/foo.jar!/{圖片路徑}
今天遭遇了第二個問題,又讓我搞了一陣子JarImageFetcher。
留言