无法理解异常



这是代码:

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)

为什么我会得到这些例外?我该如何解决。

您从未创建过对象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做这件事。

您尚未初始化Graphics g

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

始终转到发生NullpointerException的行,并查看该行中使用了哪些对象。在这种情况下,只有图形对象"g"在使用。然后试着弄清楚为什么"g"有一个空引用。正如您所看到的,"g"从未被实例化,它只是被声明的。你必须把它更新一下。

这很好:由于您正在使用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

相关内容

  • 没有找到相关文章

最新更新