2011-06-02 95 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