-2

ユーザーという名前のクラスの配列オブジェクトを作成したいのですが、チェックボックスをクリックすると、そのクラスの新しいオブジェクトが作成されます。実行してチェックボックスエラーをクリックすると、スレッド「AWT-EventQueue-0」の例外java.lang .NullPointerException

public class User
{
    public int user_amt;
    int user_location;
    String user_name;
    private boolean user_isSelected()
    {
            return true;
    }
    int user_id;
User()
{
    user_amt = 0;
    user_location = 0;
    user_name = "NUL";
    user_id = 0;
    user_isSelected();

}

}

class main()
{
 int users_active;
 private void jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) {

        users_active++;
        User[] user = new User();

    }
}
4

3 に答える 3

1

試してみてください:

User[] user = new User[5];
user[0] = new User();
于 2013-02-10T09:05:12.987 に答える
0

コードの問題は、参照の配列を作成していることですが、これらの参照はそれぞれヒープ上に作成する必要があります。

so User[] user = new User[5]<- は 5 つの参照を作成します

user[0] = new User();<- ヒープ上にタイプのオブジェクトを 1 つ作成し、それを参照Userに割り当てます。user[0]

于 2013-02-10T09:20:24.610 に答える
0

以下は明らかに間違っています。

User[] user = new User();

User[] userは User の配列ですが、 は Usernew User()の単一インスタンスです。

第 2 に、配列にメンバーを追加する前に配列のサイズを事前に割り当てる必要がある C++、C#、または Java でコーディングする場合は、Visual Basic について知っていることをすべて放棄する必要があります。

あなたはできません

User[] users;
for(int i=0; i<10; i++){
  users[i] = new User();
}

必ず

User[] users = User[10];
for(int i=0; i<10; i++){
  users[i] = new User();
}

また

User[] users = {
  new User(), new User(), new User(), new User(), new User(), 
  new User(), new User(), new User(), new User(), new User()
}  

ArrayList は拡張可能であるため、ArrayList の使用を検討する必要があるのはそのためです。配列は拡張できません。

List<User> users = new ArrayList<User>();
for(int i=0; i<10; i++){
  users.add(new User());
}

5人目のメンバーを獲得するには、

users.get(4);
于 2013-02-10T09:21:18.733 に答える