0

最初に.bmp画像を取得することにより、「seeBMPImage」と呼ばれるクラスRetinaのメソッドをテストする次のテストクラスTest_Retinaがあります。ただし、ヌル ポインター例外が発生します。66 x 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");
    }
}

}

4

2 に答える 2

0

リソースがそれを呼び出すクラスと同じパッケージ内にある場合でも、リソース名には完全修飾パッケージ名を付ける必要があります。getClass().getResource() は、現在のクラスをロードしてリソースをロードするために使用された ClassLoader を使用する this.getClass().getClassLoader().getResource(...) と本質的に同じです。クラス自体はそうではありません。リソースをロードします。たとえば、リソースがパッケージ test.p1.p2 にある場合、リソース名「test/p1/p2/2.bmp」を使用します。

于 2013-06-10T19:58:27.027 に答える