package other;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;public  class paint2 extends JFrame{
static JPanel p;
public static JPanel f()
{
p=new JPanel();
p.setLayout(new BorderLayout());
Graphics g=p.getGraphics();
g.setColor(p.getForeground());
g.drawLine(1, 1, 50, 50);
return p;
}
public static void main(String[] main){
paint2  a = new paint2();
a.setSize(600,400);
a.add(f());
a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
a.setVisible(true);
}
}
为什么这个会运行错误?该怎么改?

解决方案 »

  1.   

    g为null,解释原因见http://zhidao.baidu.com/question/180810909.html?push=related
      

  2.   

    那为什么在这可以?
    import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;
    public class TestApplet extends Applet
    {
         String strFont;
         int xOrigin,yOrigin;
          public void init()
          {    strFont=getParameter("font");
              addMouseListener(new MouseAdapter()
               {
                    public void mousePressed(MouseEvent e)
                    {
                           xOrigin=e.getX();
                           yOrigin=e.getY();
                    }
                    public void mouseReleased(MouseEvent e)
                    {
                           Graphics g=getGraphics();
                           g.setColor(Color.blue);
                           g.drawLine(xOrigin,yOrigin,e.getX(),e.getY());
                    }
               });
          }
          public void start()
          {
               System.out.println("start");
          }
          public void stop()
          {
              System.out.println("stop");
          }
          public void destroy()
          {
              System.out.println("destroy");
          }
          public void paint(Graphics g)
          {                                                 
              Font f=new Font(strFont,Font.BOLD,30); 
              g.setFont(f);
              g.setColor(Color.blue);
               g.drawString("维新科学",0,30);
          }
    }
      

  3.   

    一个面板在被show出来
    就是setVisible(true)出来之前
    graphics是默认为null的
      

  4.   

    那在setVisible(true)之后graphics就不为null了吗?为什么?
      

  5.   

    是吗??? 应该是空的,把画图的语句放在setVisible(true)之后,框架出来后,还是抱空指针异常,
    说明之后graphics是空的