2013-08-07 161 views
1

我有一些問題從另一個類獲取圖像。我以前從來沒有遇到過這個問題。有人可以請我指出正確的方向。爲什麼我不能getImage()?

package main; 

import java.awt.Color; 
import java.awt.DisplayMode; 
import java.awt.Graphics; 
import java.awt.GraphicsDevice; 
import java.awt.GraphicsEnvironment; 
import java.awt.Image; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 

public class Main extends JFrame { 

    public static Character character; 

    static GraphicsEnvironment graphicsEnvironment; 
    static GraphicsDevice graphicsDevice; 
    static DisplayMode displayMode; 

    private Image i; 

    public static void main(String[] args) { 
     displayMode = new DisplayMode(1280, 720, 16, DisplayMode.REFRESH_RATE_UNKNOWN); 
     graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
     graphicsDevice = graphicsEnvironment.getDefaultScreenDevice(); 

     Main m = new Main(); 
     m.run(); 
    } 

    public void run() { 
     setUndecorated(true); 
     setResizable(false); 

     graphicsDevice.setFullScreenWindow(this); 

     try { 
      graphicsDevice.setDisplayMode(displayMode); 
     } catch (Exception e) { 
     } 
    } 

    public void paint(Graphics g) { 
     g.setColor(Color.cyan); 
     g.fillRect(0, 0, displayMode.getWidth(), displayMode.getHeight()); 
     i = character.getImage(); 
     g.drawImage(i, 100, 100, this); 
    } 
} 

package main; 

import java.awt.Image; 
import javax.swing.ImageIcon; 

public class Character { 
    private Image i; 

    public Image getImage() { 
     i = new ImageIcon(this.getClass().getResource("/raw/images/player1.png")).getImage(); 
     return i; 
    } 
} 

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at main.Main.paint(Main.java:52) 

它說,錯誤是i = character.getImage();

我已經做applet時做過很多次,這一點,如果我第一次我正在嘗試全屏遊戲

+0

這很可能是資源不存在。我也鼓勵你在'ImageIcon'上使用'ImageIO',因爲它會在遇到錯誤時提供更好的反饋... – MadProgrammer

回答

4

記住想想編譯器告訴你什麼。

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 

產生NullPointerException意味着參考變量還沒有被初始化(或者是== null,對於這個問題)。在你的情況下,這意味着要調試它,你必須檢查我和人物。如果這是你想要返回的圖像,堆棧跟蹤會更深入。

由於您正在初始化我,請回頭看看角色。你從不將字符設置爲任何內容,這意味着你不能在任何聲明中使用它。

所以,你的解決方案是做run()main(String[] args)character = new Character();, 也可以設置getImage()靜,並說i = Character.getImage();

2
  1. 更改方法聲明 公共靜態圖像的getImage(){/ *您在這裏* /代碼}
  2. ,該語句調用該方法確保第一個字母是C大寫的不是c。如Character.getImage()