2013-06-10 1 views
0

У меня есть следующий тестовый класс Test_Retina, который тестирует метод в классе Retina, называемом «seeBMPImage», сначала получая изображение .bmp. Однако я получаю исключение нулевого указателя, и я не понимаю, почему, поскольку изображение 66 на 66 пикселей в ширину называется «2.bmp» и оно находится в том же пакете, что и классы «Retina.java» и «Test_Retina.java»,Поиск файла .bmp с использованием класса java Метод чтения ImageIO

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

Когда вы получаете исключение, обычно это хорошая идея (соответствующие части) stracktrace. – haraldK

ответ

0

Раскоментируйте линия:

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

в методе setUp.

В настоящее время this.retina является null.

0

вы должны дать имя ресурса с полным именем пакета, даже если ресурс находится в том же пакете, что и класс, в котором вы запускаете Это. getClass() - это то же самое, что и this.getClass(). getClassLoader(). getResource (...), который использует ClassLoader, который использовался для загрузки текущего класса для загрузки ресурса, сам класс не загрузить ресурс. Так что, если ваш ресурс находится в пакете test.p1.p2, например, вы хотите использовать имя ресурса «тест/p1/p2/2.bmp»

+0

Я просто попробовал this.retina.seeBMPImage («тесты/модель/2.bmp»); и я получаю точно такую ​​же ошибку. Но спасибо за предложение –

+0

Вместо 'this.retina.seeBMPImage (« тесты/модель/2.bmp »);' try' this.retina.seeBMPImage ("/ tests/model/2.bmp"); ' –

+0

Это без разницы. Если ресурс был «null», 'ImageIO.read()' выбрал бы 'IllegalArgumentException'. – haraldK