[英]Java getClass().getResource("file") leads to NullPointerException
我正在關注Snake Java 游戲教程,但總是收到此錯誤:
ImageIcon iid = new ImageIcon(this.getClass().getResource("ball.png"));
ball = iid.getImage();
Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at snake2.Board.<init>(Board.java:52)
at snake2.Snake.<init>(Snake.java:10)
at snake2.Snake.main(Snake.java:22)
我實際上只是復制並粘貼了代碼以查看它是如何工作的。 它們也在正確的包裝中; 但是當我嘗試運行它時,我總是以這個錯誤告終。
圖像應該與編譯的類位於同一個包(操作系統術語中的文件夾)中。 檢查您是否在同一文件夾中同時擁有.class
和.png
。 如果沒有,您可以在getResource(..)
使用類路徑相對路徑,以/
開頭
嘗試這個:
ImageIcon iid = new ImageIcon(this.getClass()
.getClassLoader().getResource("ball.png"));
ball = iid.getImage();
確保圖像與 java 文件在同一文件夾中。
嘗試使用System.out.println(System.getProperty("java.class.path"));
找出 .class 文件的位置並將圖像放在此文件夾中。
使用相對路徑加載資源通常有風險,我總是建議使用絕對路徑,所以這樣做
/ball.png
如果圖像位於類路徑的根目錄,或添加到該位置的路徑。
您必須將圖像文件(ball.png)放入您的類路徑中。 更多細節,請查看Javadoc 。
在 Eclipse 中轉到 project >clean 它將刷新包資源管理器,您將不再遇到此問題。
您可能需要將該文件添加到您的構建資源中,如下所示:
<build>
<resources>
<resource>
<directory>path\to\resources</directory>
<includes>
<include>ball.png</include>
</includes>
</resource>
</resources>
您只能使用圖像的路徑。 我認為這會幫助你:使用這個:
ImageIcon iid = new ImageIcon("C:\\Users\\ranig\\My\\spaceinvaders\\ball.png");
注意: C:\\\\Users\\\\ranig\\\\My\\\\spaceinvaders\\\\ball.png
是ball.png 圖像的整個路徑。
而不是這個:
ImageIcon iid = new ImageIcon(this.getClass().getResource("ball.png"));
注意:如果您只想嘗試蛇代碼並且只想獲得輸出。
我會讓你變得簡單。 下面是一個例子:
Icon bug = new ImageIcon(getClass().getResource("bug1.png"));
這里“bug1.png”是資源,如果它不可用,那么它可能會導致錯誤,正如您在此處討論的那樣。
將圖像導入到您的程序所在的同一目錄中。
你也可以給出完整的路徑
ImageIcon(getClass().getResource("C://me/file/bug1.png"));
如果資源在您的類路徑中,那么您應該嘗試“this.getClass().getClassLoader().getResource("ball.png")”。 為了讓您的實際代碼工作,ball.png 需要位於您的 .class 文件所在的位置(即,在包內)。
未找到如此命名的資源。 它需要與您從中調用它的 .class 文件位於同一目錄中。 請參閱 Javadoc。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.