在java中保存鼠标点击

时间:2011-05-13 18:00:48

标签: java

我试图在点击时保存鼠标位置的位置。然后我需要分析它的动作以执行特定任务。我使用了mouseListener接口,当用户点击鼠标时我添加点击点然后,当用户点击一个按钮时,我尝试循环遍历数组来分析动作,但我在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;
    }}}}

有人可以帮我解决这个问题。谢谢提前

2 个答案:

答案 0 :(得分:4)

你不想遍历所有数组 - 你只想循环到numPoints,因为以后的条目是空的,对吧?实际上,如果你要将一个元素与下一个元素进行比较,那么你实际上只想循环到i < numPoints-1,这样你最后还有一个元素可以与之比较。

考虑使用像List这样的ArrayList而不是数组 - 这样可以更容易避免这样的问题。

答案 1 :(得分:2)

你必须在

处迭代到numPoints而不是points.length
for(int i=0;i<points.length;i++)

points.length是数组的总大小,而不是包含的元素数。