2013-02-10 3 views
-2

Я хочу создать объект массива класса с именем User, когда я нажму на флажок, должен быть создан новый объект этого класса. Когда я запустил и нажал галочку error: Исключение в потоке "АВТ-EventQueue-0" java.lang.NullPointerExceptionИспользование объектов в качестве массивов в Java

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(); 

    } 
} 

ответ

1

Просто попробуйте:

User[] user = new User[5]; 
user[0] = new User(); 
+0

Это работало огромное спасибо, вы можете объяснить мне, как эти линии работают и в чем была проблема с моим кодом. –

+0

Каждый объект в java должен быть создан (выделен). Это делается с использованием ключевого слова 'new'. Чтобы создать экземпляр класса 'MyClass', вы должны сказать' new MyClass() '. Чтобы создать массив 'MyClass', вы должны сначала сказать' new MyClass [n] 'для создания массива элементов' n', затем создать и назначить отдельные элементы, используя 'myarray [i] = new MyClass()' – AlexR

0

Проблема с вашим кодом заключается в том, что вы создаете массив ссылок, но каждая из этих ссылок должна быть создана в куче.

так User[] user = new User[5] < - создает 5 ссылок

user[0] = new User(); < - создает 1 объект типа User на куче и присваивает его user[0] ссылки.

0

Правильно неправильно.

User[] user = new User(); 

User[] user является массивом пользователя, в то время как new User() представляет один экземпляр пользователя.

Во-вторых, вам нужно отказаться от всего, что вам известно о визуальных базовых, когда вы код на C++, C# или Java, где вам нужно предварительно выделить размер массива перед добавлением к нему членов.

Вы не можете сделать

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, поскольку они могут быть расширены. Пока массивы не расширяются.

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

Чтобы получить 5-й элемент,

users.get(4); 
Смежные вопросы