import java.awt.*;
import java.awt.event.*;public class T extends Frame {
  
  Panel pl;       public T() {
    super("T");    pl = new Panel();    add(pl);    Graphics g = pl.getGraphics();
    g.drawRect(0, 0, 30, 40);
  }
  public static void main(String[] args)
  {
    Frame f = new T();
    f.setSize(800, 600);
    f.setVisible(true);
  }
}
以上代码问什么会出现异常?请各位高手指点

解决方案 »

  1.   

    空指针。。Graphics g没来得及初始化。。具体只怕要看源代码了。。
      

  2.   

    import java.awt.Frame;
    import java.awt.Graphics;public class T extends Frame { 
      public T() { 
        super("T"); 
      } 
      
    public void paint(Graphics g) {
    g.drawRect(0, 0, 30, 40); 
    }public static void main(String[] args) 
      { 
        Frame f = new T(); 
        f.setSize(800, 600); 
        f.setVisible(true); 
      } 

      

  3.   

    Graphics g图形上下文是图形组件绑定到具体的图形设备上才创建的,一般来说对JFrame使用setVisible(true)方法让其显示到屏幕也就是和图形设备进行了绑定,此时对组件使用getGraphics()才不会返回null。有种方法可以在组件可见之前让getGraphics()方法返回非null值,就是在此方法之前用addNotify()方法。不过在你的程序中这样改虽然运行能通过但看不到效果,原因是JFrame显示时调用了所有组件的paint(Graphics g)方法把你画的矩形冲刷掉了。3楼的代码应该就是你想要的。