一、問題
ImageIcon icon = new ImageIcon("a.gif");
執行結果是icon無法顯示
二、解決
類中有如下調用:
ImageIcon icon = new ImageIcon("a.gif");
很自然地認為當前類文件和圖片在同一路徑下即可。
其實所謂的相對路徑起點是工程的根目錄,即project。
這行代碼執行時在project目錄下查找名為a.gif的文件,結果當然是找不到。
要得到工程的相對路徑可通過System.getProperty("user.dir")得到。
對圖片和對文件的查找應該是一致的,如new File()。
假如你的工程根目錄為:project1
你的圖片文件放在:project1/src/images/a.gif
所以正確的調用是:
ImageIcon icon = new ImageIcon("src/images/a.gif");
這行代碼執行時在project/test目錄下查找到了文件
?
總結起來就是一句話:所謂相對路徑就是相對于工程根目錄的位置
?
三、其他
查看了一下ImageIcon的構造函數。
Public ImageIcon(String filename)//參數可以是絕對路徑也可以是相對路徑
Public ImageIcon(URL url)
?
第一種構造不在贅述。
第二種通過URL來得到圖片
URL url = getClass().getResource("a.gif"); //當前編譯后class文件所在目錄查找
ImageIcon icon = new ImageIcon(url);
ImageIcon支持GIF、JPG、PNG等格式。