2011-11-08 22 views
1

私はこのメソッドを渡す前にこのコードを書いていました。ヌルポインタの例外エラーJavaの

しかし、いったんメソッドとパラメータを使用して整理を開始した後は、Null Pointer Exceptionを実行しています。なぜ私はそのようなエラーを起こすのですか?

import javax.swing.JFrame; 
import javax.swing.JLabel; 


public class test { 

    private static JLabel label; 

    public static void main(String[] args){ 
     initializeLabel(); 
     initializeFrame(label); 
    } 

    private static void initializeLabel(){ 
     JLabel label = new JLabel(); 

     label.setText("hi"); 

    } 

    private static void initializeFrame(JLabel label){ 
     JFrame frame = new JFrame(); 
     frame.add(label); 
     frame.setVisible(true); 
    } 

} 
+0

実際のエラーメッセージを含めると、間違ったことがわかります。 –

+0

initializeLabel()に新しいラベルを作成しない – zengr

答えて

2

問題は、この機能である:

private static void initializeLabel(){ 
    JLabel label = new JLabel(); // This creates a new variable named label 
    label.setText("hi"); 
} 

あなたはthis.labelをintializeしようとしているが、あなたは、単に新しい変数を作成し、それを代入しています。このように変更します。

private static void initializeLabel(){ 
    label = new JLabel(); // or this.label = new JLabel(); 
    label.setText("hi"); 
} 
1
private static void initializeFrame(JLabel label){ 
     JFrame frame = new JFrame(); 
     frame.add(label); <-- Here it might be throwing NPE because label is not initialized and is null. 
     frame.setVisible(true); 
    } 

あなたはNPEを受けている理由ですグローバルlabel変数を初期化していません。 initializeLabel()メソッドに新しいラベルを作成しないでください。それ以外の方法でグローバル変数を初期化しないでください。だから、

private static void initializeLabel(){ 
    label = new JLabel(); 
    label.setText("hi"); 
} 

はまたinitializeFrame()initializeFrame(JLabel label)を変更...このような何かを見て。クラス 'グローバルスコープでlabelを宣言したので、パラメータとしてラベルを渡す必要はありません。

private static void initializeFrame(){ 
    JFrame frame = new JFrame(); 
    frame.add(label); 
    frame.setVisible(true); 
} 
1

それのスコープは、あなたの方法initializeLabel()にあるので、あなたはメソッド内labelを初期化するからです。 labelをグローバル変数にして、あなたの初期化メソッドを実行して、プログラム全体にアクセスできるようにする必要があります。

1

initializeLabelでは新しいラベルを作成しますが、そのラベルを静的変数に代入するのではなく、メソッドの実行後に失われるローカル変数に代入します。

に変更:

private static void initializeLabel(){ 
    label = new JLabel(); 

    label.setText("hi"); 

} 
1

あなたがない:

JLabel label = new JLabel(); 

initializeLabel()内には、それは新しい、ローカル変数、あなたが設定しているとは思いませオブジェクトレベルの一つです。したがって、オブジェクトレベルのものは、まだデフォルト値のnullに設定されています。

label = new JLabel(); 
1

変更ライン15を:あなたは、オブジェクトレベル1に影響を与えるだけのためにそれを設定したい場合は

label = new JLabel(); 

は、そうでなければ、ラベルを再定義しました。

+1

フィードバックありがとうございます! :) –

1

initializeFrame(JLabel label)メソッドに初期化されていないJLabelを解析しているため、この例外が発生しています。

initializeFrame(JLabel label)メソッドにパーズする前にlabelを初期化します。

initializeLabel(); 
label = new JLabel("Your label Name ..."); 
initializeFrame(label); 
関連する問題