2011-04-24 25 views
10

我下面的zetcode Snake java games tutorial始終得到這個錯誤:的Java的getClass()的getResource(「文件」)導致的NullPointerException

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) 

我實際上只是複製並粘貼代碼,看看它是如何工作的。他們也在正確的包裝中;但是當我嘗試運行它時,我總是會遇到這個錯誤。

+2

是否有ball.png文件旁邊的.java文件?如果你使用eclipse,你刷新了源文件夾嗎?上面的代碼是否從不同的包中的子類方法調用? – 2011-04-24 07:51:30

+0

我將它導入錯誤的地方.i認爲在項目中導入它會將其添加到資源中。如何在全球範圍內添加資源,比如我想將D:\ myresources \添加到我的項目 – kapitanluffy 2011-04-24 08:02:18

回答

-2

找不到此資源。它需要與您調用它的.class文件位於同一個目錄中。看到Javadoc。

+0

中,那麼您的意思是我應該將ball.png添加到資源中? – kapitanluffy 2011-04-24 07:53:08

+0

@kapitanluffy:您似乎正在使用資源API,但不知道它的用途。我建議你閱讀Javadoc。 – EJP 2011-04-24 13:15:45

+1

@downvoter請解釋 – EJP 2014-02-16 07:41:34

2

這是一般的冒險加載使用相對路徑的資源,我總是建議使用絕對路徑,這樣做

/ball.png 

如果圖像是在你的classpath的根目錄,或添加到路徑那個地點。

0

如果資源在你的類路徑中,那麼你應該嘗試「this.getClass()。getClassLoader()。getResource(」ball.png「)」。爲了讓你的實際代碼正常工作,ball.png需要位於你的.class文件所在的位置(即,在包內)。

+0

這兩句話相互矛盾。使用類加載器方法會丟失有關.class文件位置的信息。 – EJP 2014-01-20 03:32:09

12

圖像應與編譯的類位於相同的包(操作系統術語文件夾)中。檢查您是否同時擁有.class.png。如果沒有,你可以在getResource(..)使用類路徑相對路徑,通過啓動/

6

試試這個:

ImageIcon iid = new ImageIcon(this.getClass() 
        .getClassLoader().getResource("ball.png")); 
ball = iid.getImage(); 

確保圖像在同一文件夾中的java文件。

1

你必須把圖像文件(ball.png)放到你的類路徑中。更多細節請看the Javadoc

4

嘗試使用System.out.println(System.getProperty("java.class.path"));來查找.class文件的位置並將圖像放置在此文件夾中。

-1

轉到項目>清潔日食它會刷新包瀏覽器,你不會再面臨這個問題。

0

您可能需要將文件添加到您的構建資源,這樣的事情:

<build> 
    <resources> 
     <resource> 
      <directory>path\to\resources</directory> 
      <includes> 
       <include>ball.png</include> 
      </includes> 
     </resource> 
    </resources> 

0

你可以用你的形象的唯一路徑。我認爲這將有助於你: 使用此:

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")); 

注:如果妳只想嘗試蛇代碼,只希望得到的輸出。

0

我會讓它變得簡單。這裏有一個例子:

Icon bug = new ImageIcon(getClass().getResource("bug1.png")); 

這裏「bug1.png」是資源,如果它是不可用,那麼,你在這裏討論它可能會導致錯誤。

將圖像導入到程序所在的相同目錄中。

你也可以把它給整個路徑以及

ImageIcon(getClass().getResource("C://me/file/bug1.png")); 
相關問題