0

ログインフォームを作成し、ボタンを押すと、入力した名前を別のクラスに渡したいです。

private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {                                         

    get_name = this.nameField.getText();
    get_pass = this.passwordField.getText();

}

別のクラスでは、これは null を出力します。

public static void main(String[] args) {
    LoginFrame logframe = new LoginFrame();
    System.out.println(logframe.get_name);
}
4

2 に答える 2

1

このmain()メソッドget_nameは、値が設定される前に呼び出されるため、取得していnullます。アプリケーションをデバッグする (または単に移動するprint)場合、呼び出される可能性はget_nameありません。nullokButtonActionPerformed()

また、パブリック変数を使用することはお勧めできません。それらをプライベートに設定して使用gettersし、setters代わりにアクセスする必要があります。これは、そうする正当な理由のリストです。

于 2013-05-13T21:01:52.583 に答える
0

アクションリスナーは実行時にアクションを実行しますが、静的変数とメソッドはコンパイル時に値を取得するため、テキストフィールドをいくつかのデフォルト値に定義できます。
次の例を参照してください。

private static int a ;
public static void test(){
 a = 3;
System.out.println(a);
a=5; 
System.out.println(a);
}

おそらく出力は (3 then 5) になると思いますが、実際には静的変数がレーザー値を取るのは正しくないため、出力は次のようになります。

5
5

okButtonActionPerformedそのため、コンパイル後に(実行時に)テキストフィールドの値を取得するように、実行時に値が変更されるため、ダイナミクスを作成しますが、コンパイル中に設定されるnullため、出力は次のようになります

ヌル

一部のクラス フィールドへのアクセスに問題がある可能性があります。次の例を参照してください。

class Fruit{
 private String type;

 public String getType(){
       return this.type;
 }

 public void setType(String type){
       this.type = type;
}
}

public class Main{
//default constructor 
 public Main(){
 Fruitobj = new Fruit();
 obj.setType("Apple");
 System.out.println(obj.getType());
}
}

このチュートリアルも参照してください。これも、StackOverFlow が回答した優れた記事です。

于 2013-05-13T21:03:13.840 に答える