2012-04-07 8 views
0

3rd Code Sample contains the error - how to solve?パラメータとして転送されたオブジェクトの参照

次のコードでは、「ジェネレータ」というメソッドを生成しました。 このメソッドは、JTextFieldとJLabelをパラメータとして受け取ります。

個々のJPanelを生成し、別のJPanel(境界線 "Vermieter"を持つJPanel)に追加します。 は、結果は(赤印)、次のようになります。

http://imageshack.us/photo/my-images/853/stammdateneraffsenguibe.png/

をここで私は、フィールドとしてのJTextFieldをインスタンス化しています:

private JTextField txtplzvermieter; 
private JTextField txtemailvermieter; 
private JTextField txtgeburtsdatumvermieter; 
private JTextField txthandyvermieter; 
private JTextField txtidvermieter; 
private JTextField txtnamevermieter; 
private JTextField txtortvermieter; 
private JTextField txtstrassevermieter; 
private JTextField txttelefonvermieter; 
private JTextField txtvornamevermieter; 

ここで私は私が

、上記の私のMethodeのを呼び出しています
 public void vermieterPanel(JPanel verPanel){ 
     verPanel.add(generator("ID", txtidvermieter)); 
     verPanel.add(generator("Name", txtnamevermieter)); 
     verPanel.add(generator("Vorname", txtvornamevermieter)); 
     verPanel.add(generator("Straße", txtstrassevermieter)); 
     verPanel.add(generator("PLZ", txtplzvermieter)); 
     verPanel.add(generator("Ort", txtortvermieter)); 
     verPanel.add(generator("Geburtsdatum", txtgeburtsdatumvermieter)); 
     verPanel.add(generator("Telefon", txttelefonvermieter)); 
     verPanel.add(generator("Handy", txthandyvermieter)); 
     verPanel.add(generator("E-Mail", txtemailvermieter)); 

ここにエラーを含むメソッドジェネレータがあります:

 public JPanel generator(String lableText, JTextField s){ // generiert ein Panel mit einer Zeile aus lable + TextFeld 

    JPanel gens = new JPanel(); 
    JLabel lable = new JLabel(lableText); 
    lable.setPreferredSize(new Dimension(100,25)); 

    s = new JTextField(); 
    s.setPreferredSize(new Dimension(200, 25)); 


    gens.add(lable); 
    gens.add(s); 
    return gens; 
    } 

後、私は私が手に私のオブジェクトにアクセスするために、行を削除した場合、私はここにs = new JTextField();

新しいJTextFieldを、オブジェクトへの参照を作成しているので、私は.getText();と私のTeftFieldsの参照を取得することはできませんNULLポインタ例外。

私は間違っていますか?

答えて

0

初期化する前にJTextieldを渡しているので、もちろん例外が発生します。
パラメータを渡す前に、
をnewキーワードで初期化するだけです。

+0

Whops。言いたいことは、JTextFieldを参照するメソッドinitComponentsを呼び出すことです。 このようにJTextFieldsを宣言しても、 private JTextField txtplzvermieter = new JTextField(); プライベートJTextField txtemailvermieter = new JTextField(); プライベートJTextField txtgeburtsdatumvermieter = new JTextField(); プライベートJTextField txthandyvermieter = new JTextField(); プライベートJTextField txtidvermieter = new JTextField(); 私はまだ同じNullPointerを取得します – RCK69

+0

ジェネレータの入り口のところでコードをデバッグして自分のフィールドを監視し、何が起きているのかを確認してください – GingerHead

+0

THX!私がデバッグしたとき、ジェネレータ()メソッドがうまくいたことがわかりました! エラーはここにありました: mieterPanel(mietPanel); mieterPanel(mietObjektPanel); "mietObjektPanel"にはランダムなものがいくつか含まれていたため、新しいパネルをmieterPanelに追加しました...新しいパネルを作成し、ジェネレータでmietObjektPanelを構築したとき() - メソッドそれは魅力のように働いた。私は新しいスキルをlearnndする前にデバッガーを使用していない - thx – RCK69

0

元の値は決して作られていません。あなたはこれをする必要があります

private JTextField txtplzvermieter = new JTextField(); 

各1つです。しかし、それはメソッドの外になければならず、内部のものでなければなりません。あなたが参照としてオブジェクトを渡すことはできません、それはあなたがオブジェクトをパラメータとして渡すと、これは、コピーのjava言語、最小限のメモリ管理
の作成を目的とした
起こることはありませんJavaで

+0

あなたの提案をありがとうが、私はすでにそれを試みました。私は、行を削除する場合 私はNullPointerExceptionが取得:データベースでdatabase.Gui.generator(Gui.java:192) \tのスレッドで 例外 "AWT-EventQueueの-0" java.lang.NullPointerExceptionが \t。 Gui.mieterPanel(Gui.java:173) \t、database.Gui。stammdatenErfassen(Gui.java:139) \t at database.Gui.actionPerformed(Gui.java:241) – RCK69

0

オブジェクトの参照の変更が
に渡されるので、オブジェクトのfieldのすべての変更は、newキーワードを持つ新しいオブジェクトに割り当てる場合を除いて反映されます。ここでオブジェクトのグラブを緩めます JField s as global classfield sであり、paramters 'セクションでメソッドに渡さないでください。

+0

thx - これは非常に便利でした! My JFieldsはすでにグローバルクラスのメンバーです! オブジェクトの参照を渡すことができない場合、どのようにこれらのTextFieldのすべてに対してJPanel(JLabelとJTextfield)を生成するように、メソッド "ジェネレータ"をどのように書くことができますか? – RCK69

+0

@ RCK69私の他の答えをお読みください – GingerHead

関連する問題