2017-03-21 1 views
1

私はそれをクリックすると、テキストを変更することができるJavafxラベルで2D配列を塗りたいです。 これは私の実際のコードですが、NullPointer例外を返しています。ラベル2D配列| JavaFX

BLOCKQUOTE

`public static Label[][] initWelt() { 
    Label[][] welt = new Label[DIM1][DIM2]; 
    for (int x = 1; x < welt.length - 1; x++) { 
     for (int y = 1; y < welt.length - 1; y++) { 
      if (Math.random() > 0.4) { 
       welt[x][y].setText("X"); 
      } 
      else{ 
       welt[x][y].setText(" "); 
      } 
     } 
    } 
    return welt; 
}` 
+1

[NullPointerExceptionとは何ですか?それを修正するにはどうすればいいですか?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -それ) – VGR

答えて

2

それがnullpointer例外を返します。

以下のコードが行う唯一のことは、それがtwo-dimensional配列を移入しない、two-dimensional配列を初期化され、それゆえNullPointerExceptionが発生します。オブジェクト参照を持つtwo-dimensional配列を移入せずに

welt[x][y].setText("X"); 

Label[][] welt = new Label[DIM1][DIM2]; 

基本的にはこれを呼び出すことはできません。

Label[][] welt = new Label[DIM1][DIM2]; 
for(int i = 0; i < DIM1; i++){ 
    for(int j = 0; j < DIM2; j++){ 
     welt[i][j] = new Label(); 
    } 
} 

、あなたの手であなたの現在のタスクを続行することができますこの問題を克服するための

は、最初の2次元配列は、以下のようなものを取り込みます。

は今、あなたのコードは次のようになり:

public static Label[][] initWelt() { 

    Label[][] welt = new Label[DIM1][DIM2]; 

    for(int i = 0; i < DIM1; i++){ //populate the array 
     for(int j = 0; j < DIM2; j++){ 
      welt[i][j] = new Label(); 
     } 
    } 

    for (int x = 0; x < DIM1; x++) { 
     for (int y = 0; y < DIM2; y++) { 
      if (Math.random() > 0.4) { 
       welt[x][y].setText("X"); 
      } 
      else{ 
       welt[x][y].setText(" "); 
      } 
     } 
    } 
    return welt; 
} 

- 個人的に私は現在のメソッドをリファクタリングし、さまざまな方法でtwo-dimensional配列を移入するコードを挿入する方が良いと思います。