使用java类ImageIO读取方法查找.bmp文件

时间:2013-06-10 19:49:49

标签: java bmp javax.imageio

我有以下测试类Test_Retina,它通过首先检索.bmp图像来测试名为“seeBMPImage”的Retina类中的方法。但是,我得到一个空指针异常,我不明白为什么因为66像素宽的图像被命名为“2.bmp”,它与类“Retina.java”和“Test_Retina.java”在同一个包中

public class Test_Retina extends junit.framework.TestCase {
private Retina retina;

public void setUp() {
VisionCell[][] visionCells = new VisionCell[66][66];
// this.retina = new Retina(visionCells);
}

public void test_seeBMPImage() throws IOException {
this.retina.seeBMPImage("2.bmp"); <-- !!GETTING A NULLPOINTEREXCEPTION!!
// ...
}

}

public class Retina {
private VisionCell[][] visionCells;

public void seeBMPImage(String BMPFileName) throws IOException {
BufferedImage image = ImageIO.read(getClass().getResource(BMPFileName));
    int color = image.getRGB(1, 1);
if (color == Color.BLACK.getRGB()) {
    System.out.println("black");
    } else {
        System.out.println("white");
    }
}

}

2 个答案:

答案 0 :(得分:0)

您需要为资源名称指定完全限定的包名称,即使该资源与您调用它的类位于同一个包中。 getClass()。getResource()与this.getClass()。getClassLoader()。getResource(...)基本相同,它使用用于加载当前类来加载资源的ClassLoader,类本身不具备加载资源。因此,例如,如果您的资源位于包test.p1.p2中,则需要使用资源名称“test / p1 / p2 / 2.bmp”

答案 1 :(得分:0)

取消注释该行:

// this.retina = new Retina(visionCells);

在setUp方法中。

目前this.retina是null