这是代码:
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)
为什么我会收到这些例外情况? 我该如何解决呢?
答案 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
。