2011-06-02 40 views
-2

这是代码:无法理解的异常

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

任何下来的选民可能请解释原因! – 2011-06-02 13:47:29

回答

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

3

您还没有初始化Graphics g

你应该实现一个paint方法和移动逻辑绘制背景成(见paint的JavaDoc)

2

请务必前往发生NullpointerException的行,并查看该行上使用了哪些对象。在这种情况下,它只是使用的图形对象“g”。然后试着弄清楚为什么“g”有一个空引用。正如你所看到的,“g”从来没有实例化过,它只是被声明的。你必须重新启动它。

+0

+1的建议,而不是解决问题。 :) – 2011-06-02 12:35:55

-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

+0

下来选民可能请解释原因 – 2011-06-02 13:54:42

+0

我没有downvote你,我也不会,但你正在玩“发现差异”的游戏,我会认为这是原因。我在说什么?那么,你发布了很多代码并且说“我认为这会有帮助”,但是你并没有说哪个特定的部分是有帮助的。回答时过于具体会更好。 – 2011-06-02 17:42:07

+0

@ Lasse V. Karlsen谢谢。 – 2011-06-03 02:49:39