我有以下测试类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");
}
}
}
答案 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
。