楼主将第四行代码 Point pp ; 改为 Point pp = new Point(); 就不会报空指针了
但如果将代码改为 import java.awt.*; import java.awt.event.*; import java.util.*; class Model extends Frame{ ArrayList<Point> points=null; public void launch(){ this.setBounds(300,300,800,800); points = new ArrayList<Point>(); this.setLayout(null); this.setBackground(Color.BLACK); Moi mo = new Moi(); this.addMouseListener(mo); this.setVisible(true); }
public void addpoint(Point t){ points.add(t); }
public void paint(Graphics c){ Iterator i = points.iterator(); while(i.hasNext()){ Point p = (Point)i.next(); Color col= c.getColor(); c.setColor(Color.GREEN); c.fillOval(p.x,p.y, 10, 10); } } }class Moi extends MouseAdapter{ public void mousePressed(MouseEvent e){ Model d = (Model)e.getSource(); d.addpoint(new Point(e.getX(),e.getY())); d.repaint(); } } public class Mouse { public static void main(String[] args) { new Model().launch(); }} 用一个ArrayList保存了Point,为什么在初始调用时就不会报空指针错误?
哥们,frame的刷新会调用 public void paint(Graphics c){ c.setColor(Color.ORANGE); c.fillOval(pp.x,pp.y,15,15); },所以,你在创建frame后,如果没有点击鼠标你的pp是空的,自然会空指针,至于你后面用一个ArrayList保存了Point,为什么在初始调用时就不会报空指针错误?是应为你初始化了points = new ArrayList<Point>();当调用到paint的时候发现points 的长度是0,这时候不会调用 c.fillOval(pp.x,pp.y,15,15);当然不空指针了
Point pp ;
改为
Point pp = new Point();
就不会报空指针了
import java.awt.*;
import java.awt.event.*;
import java.util.*;
class Model extends Frame{
ArrayList<Point> points=null;
public void launch(){
this.setBounds(300,300,800,800);
points = new ArrayList<Point>();
this.setLayout(null);
this.setBackground(Color.BLACK);
Moi mo = new Moi();
this.addMouseListener(mo);
this.setVisible(true);
}
public void addpoint(Point t){
points.add(t);
}
public void paint(Graphics c){
Iterator i = points.iterator();
while(i.hasNext()){
Point p = (Point)i.next();
Color col= c.getColor();
c.setColor(Color.GREEN);
c.fillOval(p.x,p.y, 10, 10);
}
}
}class Moi extends MouseAdapter{
public void mousePressed(MouseEvent e){
Model d = (Model)e.getSource();
d.addpoint(new Point(e.getX(),e.getY()));
d.repaint();
}
}
public class Mouse { public static void main(String[] args) {
new Model().launch(); }}
用一个ArrayList保存了Point,为什么在初始调用时就不会报空指针错误?
c.setColor(Color.ORANGE);
c.fillOval(pp.x,pp.y,15,15);
},所以,你在创建frame后,如果没有点击鼠标你的pp是空的,自然会空指针,至于你后面用一个ArrayList保存了Point,为什么在初始调用时就不会报空指针错误?是应为你初始化了points = new ArrayList<Point>();当调用到paint的时候发现points 的长度是0,这时候不会调用 c.fillOval(pp.x,pp.y,15,15);当然不空指针了