2016-03-26 49 views
2

在Java Slick2D,我試圖做一個行中使用一個構造函數,需要兩個浮標陣,詳見這裏:http://slick.ninjacave.com/javadoc/org/newdawn/slick/geom/Line.html的Java Slick2D線構造函數會引發NullPointerException異常

我的代碼如下:

float[] floatArray1 = { 10.0f, 155.0f }; 
float[] floatArray2 = { 20.0f, 165.0f }; 
Line line1 = new Line (floatArray1, floatArray2); 

但是,第三行(在我的代碼行263)拋出一個NullPointerException:

java.lang.NullPointerException 
    at org.newdawn.slick.geom.Line.set(Line.java:217) 
    at org.newdawn.slick.geom.Line.set(Line.java:138) 
    at org.newdawn.slick.geom.Line.<init>(Line.java:112) 
    at view.play.Character.checkIntersectionMovementVector(Character.java:263) (my method) 

這究竟是爲什麼?

編輯:值得注意的是,使用它的構造函數,四個浮點值,而不是長度二期工程兩個浮標陣,並拋出也不例外:

 Line line = new Line (10.0f, 155.0f, 20.0f, 165.0f); 

回答

2

貌似在Line類的錯誤。該Line.set()方法最終被稱爲是這樣的:

public void set(float sx, float sy, float ex, float ey) { 
    super.pointsDirty = true; 
    start.set(sx, sy);  // this is line 217 
    end.set(ex, ey); 
    float dx = (ex - sx); 
    float dy = (ey - sy); 
    vec.set(dx,dy); 

    lenSquared = (dx * dx) + (dy * dy); 
} 

然而,Line類的start實例變量沒有在構造函數中初始化你撥打:

public Line(float[] start, float[] end) { 
    super(); 

    set(start, end); // line 112 
} 

你應該把缺陷報告Slick2d維護者。作爲一種變通方法,你應該能夠使用Vector2f輸入構造:

public Line(Vector2f start, Vector2f end) 

如這裏使用不初始化startset()方法:

public void set(Vector2f start, Vector2f end) { 
    super.pointsDirty = true; 
    if (this.start == null) { 
     this.start = new Vector2f(); 
    } 
    this.start.set(start); 

    if (this.end == null) { 
     this.end = new Vector2f(); 
    } 
    this.end.set(end); 

    vec = new Vector2f(end); 
    vec.sub(start); 

    lenSquared = vec.lengthSquared(); 
} 

四個浮點輸入構造也適用,因爲它請撥Vector2f上面的構造函數:

public Line(float x1, float y1, float x2, float y2) { 
    this(new Vector2f(x1, y1), new Vector2f(x2, y2)); 
} 
+0

明智的答案,t要你。如果我可以研究如何,我會考慮通知他們。 –

+0

@AlexW輝煌的答案,不值得讚揚? Jeez,強硬的人羣。 – elhefe

+0

我沒有達到足夠的聲望來讚揚,我(或至少是)在10聲望和upvote需要15。否則,我確實會給你一個upvote。我曾試過以防萬一,唉,被拒絕了。在這種情況下,我希望最好的答案是剔出的,我的清楚的讚賞就足夠了。 –

相關問題