package test;import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;public class Main {
public static void main(String[] args) {
new MyFrame("ly");
}
}class MyFrame extends Frame {
private ArrayList<Point> pointsList; public MyFrame(String s) {
super(s);
setBounds(200, 200, 500, 400);
setVisible(true);
addMouseListener(new Mouse());
} @Override
public void paint(Graphics g) {
Color oldColor = g.getColor();
Iterator<Point> i = pointsList.iterator();
try {
while (i.hasNext()) {
g.fillOval(i.next().x, i.next().y, 5, 5);
} } catch (Exception e) {
// TODO: handle exception
}
g.setColor(oldColor);
} public ArrayList<Point> getPointsList() {
return pointsList;
}
}class Mouse extends MouseAdapter {
@Override
public void mouseClicked(MouseEvent e) {
MyFrame f = (MyFrame) e.getSource();
f.getPointsList().add(e.getPoint());
f.repaint();
}
}

解决方案 »

  1.   

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at test.MyFrame.paint(Main.java:31)
    at sun.awt.RepaintArea.paintComponent(Unknown Source)
    at sun.awt.RepaintArea.paint(Unknown Source)
    at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
    at sun.awt.windows.WWindowPeer.handleEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at test.MyFrame.paint(Main.java:31)
    at sun.awt.RepaintArea.paintComponent(Unknown Source)
    at sun.awt.RepaintArea.paint(Unknown Source)
    at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
    at sun.awt.windows.WWindowPeer.handleEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at test.MyFrame.paint(Main.java:31)
    at sun.awt.RepaintArea.paintComponent(Unknown Source)
    at sun.awt.RepaintArea.paint(Unknown Source)
    at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
    at sun.awt.windows.WWindowPeer.handleEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at test.Mouse.mouseClicked(Main.java:53)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Window.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at test.Mouse.mouseClicked(Main.java:53)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Window.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
      

  2.   

    Iterator<Point> i = pointsList.iterator();这一句报空指针异常,因为pointsList=null;
      

  3.   

    加pointsList=new  ArrayList<Point>();可避免空指针异常
    如:
                      Color oldColor = g.getColor();
    pointsList=new  ArrayList<Point>();
    Iterator<Point> i = pointsList.iterator();
      

  4.   

    class MyFrame extends Frame {
    private ArrayList<Point> pointsList;public MyFrame(String s) {
    super(s);
    setBounds(200, 200, 500, 400);
    setVisible(true);
    addMouseListener(new Mouse());
    }这里的pointsList没有实例化,导致“空指”异常的发生。
    可以用
    private ArrayList<Point> pointsList=new ArrayList<Point>(){};
    应该可以,你试试.
      

  5.   

    追踪了半天,发现这句有问题
    while (i.hasNext()) {
    g.fillOval(i.next().x, i.next().y, 5, 5);
    }改成下面这个就没有问题了
    while (i.hasNext()) {
    Point p = i.next();
    g.setColor(Color.BLUE);
    g.fillOval(p.x, p.y, 10, 10);
    }
    已经用了泛型,问什么非要转换为Point对象才能fillOval()不报异常???
      

  6.   

    i.next().x, i.next().yi.next() 每调用一次,返回的结果都不一样
    前一个.x和后一个.y不是同一个Point对象