import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class ChessPanel extends JPanel{
private int colsnum=19;
private int rectnum=22;
private int size;
private int top=5;
private int left=5;
private Graphics chess_g;
public ChessPanel(){
size=2*left+colsnum+rectnum;
chess_g=getGraphics();
setSize(size,size);
setBackground(new Color(180,150,100));
paint(chess_g);
}
public int getWidth(){
return size;
}
public void paint(Graphics g){
g.setColor(Color.black);       //此处抛出NullPointerException
int x1=0,y1=0,x2=0,y2=0;
for(int i=1;i<=colsnum;i++){
x1=left+i*rectnum;
y1=top;
x2=left+i*rectnum;
y2=top+colsnum*rectnum;
g.drawLine(x1,y1,x2,y2);
}
}
public static void main(String args[]){
new ChessPanel();
}

为什么获取的Graphics对象为空呢????请高手指点指点啊~~~~~~~~~~~~~~~

解决方案 »

  1.   

    chess_g=getGraphics(); //可能返回的是null
      

  2.   

    对啊,获取的Graphics对象就是为null,为什么呢?
      

  3.   

    chess_g = new Graphics();
    chess_g.setColor(rgb);
      

  4.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class ChessPanel extends JPanel{
    private int colsnum=19;
    private int rectnum=22;
    private int size;
    private int top=5;
    private int left=5;
    private Graphics chess_g;
    public ChessPanel(){
    size=2*left+colsnum+rectnum;
    chess_g=getGraphics();
    setSize(size,size);
    setBackground(new Color(180,150,100));
    // repaint();
    }
    public int getWidth(){
    return size;
    }
    public void paint(Graphics g){
    g.setColor(Color.black);
    int x1=0,y1=0,x2=0,y2=0;
    for(int i=1;i<=colsnum;i++){
    x1=left+i*rectnum;
    y1=top;
    x2=left+i*rectnum;
    y2=top+colsnum*rectnum;
    g.drawLine(x1,y1,x2,y2);
    }
    }
    public static void main(String args[]){
            ChessPanel cp = new ChessPanel();
            Container container = new JFrame();
            container.add(cp);
            container.setSize(400, 400);
            container.setVisible(true);
    }
    }可以这样修改,java doc里介绍了,可以重载paint()函数,但不应该直接调用它,需要的时候调用repaint()来实现。同时,需要一个容器来承载JPanel才能显示之。
    个人意见,如有不当,高手指正。