2016-12-31 79 views
-1

我試圖在Jlabel上的圖標,但我每次運行它時都會收到「NullPointerException」。它在我放入完整路徑時運行,但我不想這樣做,因爲我想要在環境中移動Java程序。設置imageIcon沒有完整路徑

jLabel1.setIcon(new ImageIcon(this.getClass().getResource("/data/images/image.jpg"))); 

我相信問題出在我嘗試使用的路徑上。

我粗略項目環境是:

/image.jpg 
/data/images/image.jpg 
data/images/image.jpg 
.\\data\\images\\image.jpg 

我在做什麼錯:

projectfolder/src 
projectfolder/data/images/image.jpg 

我已經嘗試使用?

+0

該文件需要在您的類路徑中。 – camickr

+0

這是,我只是用「路徑」來完成這個例子,我會糾正,以防止混淆。 – Exostrike

+0

證明它在類路徑中。用於啓動應用程序的命令行是什麼? –

回答

0

Class#getResource()返回資源相對於您班級的位置。改爲使用ClassLoader#getResource()。如果使用默認的類加載器,它將返回相對於程序類路徑的資源。

this.getClass().getClassLoader().getResource("data/images/image.jpg") 

您應該將您的數據文件夾放在src文件夾中。否則數據文件夾不包含在程序的.jar中。

+0

不,當路徑以斜線開始時不會發生。如果使用getCLassLoader()。getResource(),它不應該以斜槓開始。不,它不會返回相對於程序執行位置的資源。它從類路徑加載資源。 –