2013-06-10 6 views
0

나는 Retina가 먼저 .bmp 이미지를 검색하여 "seeBMPImage"라고 불리는 메소드를 테스트하는 Test_Retina 테스트 클래스를 가지고 있습니다. 그러나 null 포인터 예외가 발생하고 왜 66 픽셀 너비 "2.bmp"라는 이미지 66 및 클래스 "Retina.java"및 "Test_Retina.java"같은 패키지에 있기 때문에 이해가 안 돼요.java 클래스 ImageIO로 .bmp 파일 찾기

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

예외가 발생하면 일반적으로 추적 추적의 관련 게시물입니다. – haraldK

답변

0

줄의 주석 "테스트/P1/P2/2.bmp"리소스 이름을 사용하려면 setUp 메소드에서.

현재 this.retina는 null입니다.

0

그것. getClass(). getResource()는 리소스를로드하기 위해 현재 클래스를로드하는 데 사용 된 ClassLoader를 사용하는 this.getClass(). getClassLoader(). getResource (...)와 본질적으로 동일하지만 클래스 자체는 자원을로드하십시오.

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

: 리소스는 패키지 test.p1.p2에있는 경우 그래서, 예를 들어, 당신은

+0

방금 ​​시도한 this.retina.seeBMPImage ("tests/model/2.bmp"); 정확한 오류가 나타납니다. 하지만 제안을 주셔서 감사합니다 012.Automation.seeBMPImage ("/ tests/model/2.bmp");' –

+0

대신에 'this.retina.seeBMPImage ("tests/model/2.bmp" 이치에 맞지 않는다. 리소스가'null' 인 경우,'ImageIO.read()'는'IllegalArgumentException'을 던집니다. –

+0

이 제안 대신에 – haraldK