2013-03-19 109 views
0

我一直在使用bookClasses类来操作图像,并且在尝试删除图像中的红眼时出现NullPointerException错误。下面是代码:NullPointerException(帮助!)

首先removeRedEye方法,它是Picture.Java类中:

public void removeRedEye(int startX, int startY, int endX, int endY, Color newColor){ 

    Pixel pixel = null; 

    for (int x = startX; x < endX; x++){ 
     for (int y = startY; y < endY; y++){ 
      if (pixel.colorDistance(Color.RED) < 167){ 
         pixel.setColor(newColor); 
      } 
     } 
    } 
    } 
} 

和测试类:

public class TestRemoveRedEye{ 

    public static void main(String[] args){ 

     String fileName = FileChooser.getMediaPath("//jenny-red.jpg"); 

     Picture jennyPicture = new Picture(fileName); 

     jennyPicture.removeRedEye(109,91,202,107,java.awt.Color.BLACK); 

     jennyPicture.explore(); 

    } 
} 

如果任何人都可以说明为什么我的程序ISN”工作它将不胜感激。从removeRedEye方法

jennyPicture.removeRedEye(109,91,202,107,java.awt.Color.BLACK);从测试类

回答

1

分配null以pixel if (pixel.colorDistance(Color.RED) < 167){,你只是后调用一个方法就可以了:

这些生产线在错误挑出来。因此NPE。

Pixel pixel = null; 
for (int x = startX; x < endX; x++){ 
    for (int y = startY; y < endY; y++){ 
     if (pixel.colorDistance(Color.RED) < 167){ // <==== pixel is null ! 
        pixel.setColor(newColor); 
     } 
    } 
} 
2

像素你需要调用它的参考方法之前进行初始化。

Pixel pixel = null;// neew to initialize this. 
pixel = new Pixel(); // somethin like this 
for (int x = startX; x < endX; x++){ 
    for (int y = startY; y < endY; y++){ 
     if (pixel.colorDistance(Color.RED) < 167){