2011-05-13 8 views
0

클릭 할 때 마우스 위치의 위치를 ​​저장하려고합니다. 그런 다음 특정 작업을 수행하기 위해 모션을 분석해야합니다. mouseListener 인터페이스를 사용하고 사용자가 마우스를 클릭하면 사용자가 버튼을 클릭 할 때, i가 움직임을 분석하는 배열을 루프 시도 array.Then 점을 클릭 점을 추가하지만 if(points[i].x<points[i+1].x) 여기에서 널 포인터 예외가 발생하는 것은 코드자바에서 마우스 클릭을 저장

Point points[] = new Point[2000]; 
int numPoints = 0; 
void eventOutput(String eventDescription, MouseEvent e) { 
    System.out.println(eventDescription+" X= "+e.getX()+" Y= "+e.getY()); 
    //xList.add(new Integer(e.getX())); 
    //yList.add(new Integer(e.getY())); 
    points[numPoints] = new Point(e.getX(), e.getY()); 
    ++numPoints;   
} 
for(int i=0;i<points.length;i++) 
{ 
    System.out.println("In MOO "+points[i].x); 
    if(points[i].x<points[i+1].x) 
    { 
    xInc=true; 
    if(points[i].y<points[i+1].y) 
    { 
     yInc=true; 
    } 
    else if(points[i].y>points[i+1].y) 
    { 
     yDec=true; 
    } 
    } 
    else if(points[i].x>points[i+1].x) 
    { 
    xDec=true; 
    if(points[i].y<points[i+1].y) 
    { 
     yInc=true; 
    } 
    else if(points[i].y>points[i+1].y) 
    { 
     yDec=true; 
    }}}} 

에게 인 누구든지 저에 대해 도와주세요. 미리 감사드립니다.

+0

첫 번째 루프는 i + 1 루프에서 사용 중이기 때문에 points.length-1에서 멈춰야합니다. 둘째, 2000 포인트 객체를 배열에 저장 했습니까? – VirtualTroll

+0

@Amine 아니요, 방금 발견했습니다. 지금 변경하겠습니다. 그 점을 지적 해 주셔서 대단히 감사합니다. –

답변

4

배열 전체를 반복하고 싶지는 않습니다. 루프가 최대 numPoints이됩니다. 이후 항목이 null이기 때문에 맞습니까? 사실, 요소를 다음 요소와 비교하려고한다면 실제로는 i < numPoints-1까지 루프를 반복해야하므로 비교할 끝에 하나씩 더 있습니다.

어레이가 아닌 ArrayList과 같은 List을 사용하는 것이 좋습니다. 이와 같은 문제를 피하는 것이 더 쉽습니다.

+0

+1 points.length -1 –

+1

+1을 사용하면 배열이 최선의 해결책이 아님을 지적 할 수 있습니다. 'numPoints'가 2000을 초과하는 것을 막을 수있는 방법은 없습니다. – unholysampler

+0

맞습니다. 실제로 ArrayList를 사용하고 있었지만 동일한 문제가있어서 Point 배열로 바꿨지 만 문제는 2000 년까지 계속 반복되었습니다. 감사합니다. 너무 많이, 나는 그것을 시도 할 것이다. –

2

당신이

for(int i=0;i<points.length;i++) 

points.length에서 대신 points.length의 NumPoints와 최대 반복해야하는 것은 배열의 전체 크기, 포함 요소가 아닌 숫자입니다.

관련 문제