Ошибка в объявлении массива строк - PullRequest
0 голосов
/ 24 февраля 2011

Я получаю эту ошибку, когда я использую строковый массив java.lang.NullPointerException

Код, который я использовал, выглядит следующим образом ..

 String[] list = null;  
 String sql = "SELECT * FROM pos_products";  
 ResultSet rs = mysql_query.execute_mysql(variables.con.conn, sql);  
 while (rs.next()) {  
     System.out.println(rs.getString("product_name"));  
     list[i] = rs.getString("product_name");  
     i++;  
 }

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

Ответы [ 6 ]

4 голосов
/ 24 февраля 2011

Ваш код объявляет массив строк, но он не создает объект массива.Другими словами, он не выделяет память для хранения содержимого массива.

Вы должны написать что-то вроде:

String[] list = new String[SOME_SIZE];

Оператор new создает массив.

1 голос
/ 24 февраля 2011

Как уже отмечалось, вам нужно объявить Array, используя "new", но я предполагаю, что вы этого не делали, потому что вы не представляете, насколько большим должен быть Array.В этом случае вы рассматривали возможность использования ArrayList?

ArrayList<String> list = new ArrayList<String>();
...
list.add(rs.getString("product_name"));
1 голос
/ 24 февраля 2011

Я рекомендую вам изменить строковый массив для списка строк (или набора), потому что в вашем примере вы не знаете, сколько продуктов будет:

List<String> list = new LinkedList<String>();  
String sql = "SELECT * FROM pos_products";  
        ResultSet rs = mysql_query.execute_mysql(variables.con.conn, sql);  
        while (rs.next()) {  
        System.out.println(rs.getString("product_name"));  
        list.add(rs.getString("product_name"));  

    }
1 голос
/ 24 февраля 2011

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

Попробуйте сделать что-то подобное вместо этого

List<String> list = new ArrayList<String>;
String[] listArray = null;
String sql = "SELECT * FROM pos_products";
ResultSet rs = mysql_query.execute_mysql(variables.con.conn, sql);
while (rs.next()) {
System.out.println(rs.getString("product_name"));
list.add(rs.getString("product_name"));
i++;
}
listArray = list.toArray();

Это позволит создать размер вашего массивав тот момент, когда вы прочитали все элементы из ResultSet.

1 голос
/ 24 февраля 2011

Ваш список null, таким образом null[i] выдает исключение NullPointerException

Вам следует либо инициализировать его, как описывает ChrisJ, либо использовать Список

List<String> list = new ArrayList<String>();
.... 
    list.add( rs.getString("product_name"));
....

редактировать

Это решает две части, ваш NullPointerException и динамический выбор данных.

Вы упоминаете, что вам нужно поместить это в JList, в этом случае вы все еще можете использовать этот подход, но отделить извлечение данных от отображаемого кода.

Итак, создайте список методов следующим образом:

 public String[] fetchOptions() { 
      List<String> list = new ArrayList<String>();
      ... db code here
      while .... etc. et 
          list.add( rs.getString("product_name"));
      ... 
      // convert it to String[] 

     return list.toArray( new String[list.size()] );
 }

И затем вызвать этот метод, где вы создаете свой JList

String [] options = fetchOptions();
JList aList = ... use it normally 
1 голос
/ 24 февраля 2011

Вы должны инициализировать ваш массив list определенной длины.Имеет ли объект ResultSet некоторую функцию / атрибут для размера набора.Тогда вы можете сделать следующее:

String sql = "SELECT * FROM pos_products";
ResultSet rs = mysql_query.execute_mysql(variables.con.conn, sql);
String[] list = new String[rs.size()];
while (rs.next()) 
{
    System.out.println(rs.getString("product_name"));
    list[i] = rs.getString("product_name");
    i++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...