2014-04-11 51 views
-3

這是我第一個java項目。一切順利,我的程序編譯完成。 我在屏幕上看到了一個3D外觀。 但是當我使用我的moveTo(int x,int y)方法時,我得到一個空指針異常。 我已經看過它,這對很多人來說顯然是一個巨大的問題。 但我仍然無法理解它的概念,並且其他人的任何修補程序 似乎都不適合我的程序。 我曾嘗試使用if語句來檢查null和類似的東西,但我無法獲得正確的語法或某些東西。 例如,基礎是一個橢圓,橢圓類有一個moveTo(x,y)方法。但是當我使用base.moveTo(x,y)調用它時,我得到錯誤。 任何人都可以幫忙嗎? cylinder1.moveTo(8,8); 發生異常。 在Cylinder3D.moveTo java.lang.NullPointerException (Cylinder3D.java:57) 這是你通過堆棧跟蹤嗎? 這是矩形類中moveTo方法的代碼。 public void moveTo(int x,int y) {xPosition = x; yPosition = y; makeVisible(); draw(); }方法上的空指針異常

public class Cylinder3D 
{ 

    private int diameter; 
    private int height; 
    private Ellipse top; 
    private Ellipse base; 
    private Rectangle wall; 
    int xPosition; 
    int yPosition; 


    public Cylinder3D(int diameter, int height) 
    { 
     int x = 0; 
     int y = 0; 
     Ellipse top = new Ellipse(); 
     int xdiameter=diameter; 
     int ydiameter=diameter/2; 
     int xPosition = 0; 
     int yPosition = 0; 
     top.setState(xdiameter,ydiameter,xPosition,yPosition,"black"); 

     Ellipse base = new Ellipse(); 
     int yPositionBase = yPosition + height; 
     base.setState(xdiameter,ydiameter,xPosition,yPositionBase,"black"); 


     Rectangle wall = new Rectangle(); 
     int xSideLenght = diameter; 
     int ySideLenght = height; 
     int yPositionWall = yPosition + (diameter/4); 
     wall.setState(xSideLenght,ySideLenght,xPosition,yPositionWall,"black"); 
     //.... 

    } 



    public void moveTo(int x, int y) 
    { 
     wall.moveTo(x,y); //here is where I get the error. 
     base.moveTo(x,y); 
     top.moveTo(x,y); 
    } 
} 
+0

「我得到一個空指針異常」 - 請發佈堆棧跟蹤 –

+1

在您的**構造函數**中做了什麼'Rectangle wall = new Rectangle();',因爲您已經聲明瞭一個實例變量同名? –

+0

也發佈了wall.moveto()的代碼,它可能試圖使用一些未初始化的變量 – Kakarot

回答

3

你的構造不接觸任何您的成員變量topbasewall的,因爲在你的構造函數中聲明的局部變量的影子,你可能要初始化成員變量。

因此,他們留null,並試圖調用moveTo投擲他們的成員函數。

+0

+1,但你說的就像一個有經驗的程序員。我敢打賭,OP現在正在抽出一本字典來理解你剛剛寫下的內容...... –

+0

我並不確定你的評論意味着什麼是Deduplicator。如果你能以非常好的語言對我進行分解。 –

+0

Java在調用構造函數之前清零所有對象。然後你的構造函數應該適當地設置所有成員變量。你的不是,因爲不是分配給你的成員,而是在你的構造函數中定義一個同名的局部變量並賦值。局部陰影的成員,因此保持歸零,又名'空'指針。在期望對象的地方使用'null'會導致'NullPointerException'。 – Deduplicator