无法理解异常

时间:2011-06-02 12:00:12

标签: java swing user-interface graphics

这是代码:

import java.awt.*;
import javax.swing.*;

class tester {
JFrame fr;
JPanel p;
Graphics g;

tester() {
 buildGUI();
}

public void buildGUI() {
 fr=new JFrame();
 p=new JPanel();
 p.setBackground(Color.red);
 g.setColor(Color.black);
 g.drawOval(18,45,78,39);
 g.fillOval(18,45,78,39);
 fr.add(p);
 fr.setVisible(true);
 fr.setSize(500,500);
}

 public static void main(String args[]) {
  new tester();
 }
}

这些是我尝试运行代码时产生的异常:

Exception in thread "main" java.lang.NullPointerException at tester.buildGUI(tester.java:17) at tester.<init>(tester.java:10) at tester.main(tester.java:26)

为什么我会收到这些例外情况? 我该如何解决呢?

4 个答案:

答案 0 :(得分:3)

您尚未初始化Graphics g

您应该实现paint方法并将用于绘制背景的逻辑移动到该方法中(请参阅paint上的JavaDoc)

答案 1 :(得分:3)

您从未创建过对象g - 您刚刚声明了它。

在创建对象并将其分配给持有对它的引用的变量之前,该变量的值为null

这就是你在这里获得NullPointerException的原因。

例如:

//created a variable holding a reference to an object of type JPanel
JPanel p;
//now the value of p is null. It's not pointing to anything

//created an object of type JPanel and assigned it to p
p=new JPanel();
//now p is not null anymore, it's pointing to an instance of JPanel

嗯,您没有为Graphic对象g执行此操作。

答案 2 :(得分:2)

始终转到发生NullpointerException的行,并查看该行上使用的对象。在这种情况下,只有Graphic对象“g”正在使用中。然后试着弄清楚为什么“g”有一个空引用。正如你所看到的那样,“g”从未被实例化,它只是被声明了。你必须重新开始。

答案 3 :(得分:-1)

这很好用: 由于您使用 graphics in swing ,这将有所帮助。

import java.awt.*;
import javax.swing.*;

class tester_1 extends JPanel{
JFrame fr;
JPanel p;

tester_1() {
 buildGUI();
}

public void buildGUI() {
fr=new JFrame();
p=new JPanel();
p.setBackground(Color.red);
}

 @Override
protected void paintComponent(Graphics g) {
 super.paintComponent(g);
 g.setColor(Color.black);
 g.drawOval(18,45,78,39);
 g.fillOval(18,45,78,39);
}
}

class tester {
 tester() {
  JFrame frm=new JFrame();
  tester_1 t=new tester_1();
  frm.add(t);
  frm.setVisible(true);
  frm.setSize(500,500);
 }

  public static void main(String args[]) {
     new tester();
   }
  }

您获得的例外是因为您没有初始化变量g