Передача массива в конструктор для использования в JList - PullRequest
2 голосов
/ 23 апреля 2010

Я знаю, что название звучит странно, и это потому, что так оно и есть. Это немного долго, поэтому постарайся остаться со мной.

это макет, мой код разработан

переменные конструктор методы.

Я тоже пытаюсь заполнить Jlist, полный имен. Я тоже хочу получить эти имена, используя метод. так что здесь.

в моих переменных у меня есть JList. его называют contactNames; у меня также есть массив, который хранит 5 строк, которые являются именами контактов; вот код для этого в любом случае

String contact1;
String contact2;
String contact3;
String contact4;
String contact5;

String[] contactListNames;

JList contactList;

достаточно просто. тогда в моем конструкторе я определил Jlist, чтобы заполнить себя содержимым массива

    String[] contactListNames = new String[5];
    JList contactList = new JList(contactListNames);
    fillContactList();

этот метод fillContactList () появится в ближайшее время.

теперь здесь, где вещи поднимают шары. Я создал три разных метода, которые не сработали. в основном я пытаюсь заполнить массив всеми из них. это самый простой. он не устанавливает Jlist, он ничего не делает скомпилированным. все, что он тоже пытается сделать, это заполнить массив по одному биту за раз

public void fillContactList()
       {
           for(int i = 0;i<3;i++)
           {
               try
               {
                   String contact;
                   System.out.println(" please fill the list at index "+ i);
                   Scanner in = new Scanner(System.in);
                   contact = in.next();
                   contactListNames[i] = contact;
                   in.nextLine();
               }
               catch(Exception e)
               {
                e.printStackTrace();   
               }
           }
       }

к сожалению, это не работает. я получаю распечатку, чтобы заполнить ее по индексу 0; я что-то ввожу и получаю хороший большой стек, начиная с

    contactListNames[i] = contact;

Итак, мой вопрос вкратце:

почему я не могу заполнить массив из этого метода.

*********************************************** 888 ****************************************************** 888

трассировка стека по запросу пожалуйста, заполните список по индексу 0

overtone
please fill the list at index 1
 java.lang.NullPointerException
at project.AdminMessages.fillContactList(AdminMessages.java:410)
at project.AdminMessages.<init>(AdminMessages.java:91)
at project.AdminUser.createAdminMessages(AdminUser.java:32)
at project.AdminUser.<init>(AdminUser.java:18)
at project.AdminUser.main(AdminUser.java:47)

Ответы [ 3 ]

2 голосов
/ 23 апреля 2010

Чтобы определить массив в конструкторе, вы можете сделать что-то вроде этого,

// if values are predefined, you can explicitly fill the array
String[] contacts = {"Bill Gates", "Steve Jobs", "Jon Skeet"};

// or this way, both will work.
String[] contacts = new String[2];

Глядя на JList из документа Java, вы наверняка можете передать массив в JList

 String[] data = {"one", "two", "three", "four"};
 JList dataList = new JList(data);

Вы получаете NullPointerException, поскольку массив contactListNames не инициализирован, вам необходимо его инициализировать.

1 голос
/ 23 апреля 2010

Вы определяете массив в конструкторе так же, как и любую другую переменную. Итак, это будет выглядеть примерно так:

// define an array of size 3
String[] contactListNames = new String[3]; 

Причина, по которой вы получаете исключения, заключается в том, что вы фактически не инициализируете массив. Вы объявляете это, но никогда не устанавливаете это значение (или не назначаете размер). Вы должны опубликовать трассировку стека ошибки, но я подозреваю, что это исключение NullPointerException.

0 голосов
/ 23 апреля 2010

Тогда в моем конструкторе у меня есть Jlist определен, чтобы заполнить себя содержимое массива

String[] contactListNames = new String[5];
JList contactList = new JList(contactListNames);
fillContactList();

То, что вы делаете здесь, - это создание новых локальных переменных, которые скрывают те, которые определены в вашем классе. Измените его на:

 contactListNames = new String[5];
 contactList = new JList(contactListNames);
 fillContactList();
...