2

私はJavaが初めてで、ユーザーがGuiを介して従業員の姓名を入力できるようにしようとしています。送信ボタンを押すと、リスナーメソッドがアクティブになり、入力された値が収集されてシステムメモリに入れられます

私の問題は、名を入力すると完全に機能しますが、姓を入力するとまったく機能しないということです。送信ボタンを押すと、すべてがうまくいきません。エラーはnullポインター例外「AWTイベントキュー」です。PLSヘルプ

これは、行でエラーが発生するコードです

lName = employeeDetails2.getText();  (located closer to the end of the code)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class guiEmployee1 extends JFrame
{

    private String  fName;
    private String  lName;
    private String  gender;
    private String  payLevel;
    private String  empIDnumber;
//  private int dPayLevel; 

    JTextField employeeDetails1;
    JTextField employeeDetails2;
    JTextField employeeDetails3;    
    JTextField employeeDetails4;
    JTextField employeeDetails5;

    public guiEmployee1()
    {
        JButton submit;
        JButton b1;

        System.out.println("cabanas");

        JFrame frame = new JFrame();
        employeeDetails1 = new JTextField(10);

        JTextField employeeDetails2;
        employeeDetails2 = new JTextField(10);




        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(new Dimension(320, 75));
        frame.setTitle("Employee Details");

        frame.setLayout(new FlowLayout());

        frame.add(new JLabel("Please enter Employees first Name: "));
        frame.add(employeeDetails1);
        ButtonListenerFirstName listener = new ButtonListenerFirstName();

        frame.add(new JLabel("Please enter Employees Last Name: "));
        frame.add(employeeDetails2);
        ButtonListenerLastName listener1 = new  ButtonListenerLastName();




        b1  = new JButton  ("Submit");

        b1.addActionListener(listener);
        b1.addActionListener(listener1);


        frame.add(b1);
        frame.pack();
        frame.setSize(300,300);
        frame.setVisible(true);



    }


     public class ButtonListenerFirstName implements ActionListener
    {
        public void actionPerformed (ActionEvent e )
        {
             fName = employeeDetails1.getText();
            System.out.println("and This is the employes first name :"+ fName);         
        } 
    }

    public class ButtonListenerLastName implements ActionListener
    {
        public void actionPerformed (ActionEvent e )
        {
             lName = employeeDetails2.getText();
            System.out.println("and This is the employes Last name :"+ lName);      
        } 
    }




    public static Department getDepartment()
    {
        return null;
    }


}


Thanks 
4

2 に答える 2

4

その行で null になり、例外が発生する唯一の変数は employeeDetails2 であるため、コードを見直して、その変数にオブジェクトを割り当てているかどうか、およびその場所を確認する必要があります。これを行うと、guiEmployee1 クラスのコンストラクターでオブジェクトを employeeDetails2 に割り当てていることがわかりますが、そのすぐ上で、コンストラクターで変数を再宣言しています。したがって、オブジェクトが割り当てられたのはローカルの employeeDetails2 変数であり、初期化されていないクラス フィールドではありません。これは可変シャドウイングと呼ばれます。解決策は、コンストラクターで変数を再宣言しないことです。

すなわち:

public guiEmployee1()
{
    JButton submit;
    JButton b1;

    System.out.println("cabanas");

    JFrame frame = new JFrame();
    employeeDetails1 = new JTextField(10);

    //  JTextField employeeDetails2; ***** comment out this line *****
    employeeDetails2 = new JTextField(10);

次に、変数の名前を変更して、コードが「自己コメント」になるようにします。つまり、変数に employeeDetailsX などの一般的な名前を付けるのではなく、代わりに lastNameField と呼び、その前の変数を firstNameField と呼び、「b1」ボタンを submitButton と呼びませんか? そうすれば、コードをデバッグするときに、何をすべきかを正確に知ることができますか?

于 2011-10-16T11:41:08.570 に答える
3

私はそれをテストしていませんが、問題は次のとおりだと思います。

JTextField employeeDetails2;
employeeDetails2 = new JTextField(10);

宣言をそのままにしておけば、うまくいくはずです。

employeeDetails2 = new JTextField(10);
于 2011-10-16T11:42:45.590 に答える