2013-08-07 124 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()