2011-01-18 5 views
0

Когда я пытаюсь выполнить приведенный ниже код, в проекте возникает ошибка manual array copy to collection. С другой стороны, когда я выполняю проект в JSP с использованием NetBeans, он показывает NPE по адресу for-loop. Есть идеи?A NullPointerException в коде

ArrayList courseNames=new ArrayList(); 

String []values=request.getParameterValues("ToList"); 

for(int i=0;i<values.length;i++) 
    courseNames.add(values[i]); 
+0

Что произойдет, если 'request.getParameterValues ​​(« ToList »)' возвращает 'null'? – PaoloVictor

+3

Есть ли причина использовать стиль кодирования pre-Java5? Лучше использовать 'for (String value: values) courseNames.add (value);' хотя даже лучше использовать 'courseNames.addAll (Arrays.asList (values));'. –

+3

Для дальнейшего использования, когда код завершился с ошибкой, вы должны указать исключение (включая номера строк) и в идеале указать, где строки отображаются в вашем коде. ** Особенно ** с NPE, которые могут встречаться где угодно и редко имеют какой-либо догадающийся контекст. Подробнее см. В [http://tinyurl.com/so-hints](http://tinyurl.com/so-hints). –

ответ

2

Вы проверяете, что значение в values не равно нулю? Вы должны сделать это, так как getParameterValues не гарантирует возврат не нуль во всех случаях. (В частности, это не безопасно предположить, что если ToList отсутствует, вы получите пустой массив.)


Edit: Лучший способ сделать это сделать:

ArrayList<String> courseNames = new ArrayList<String>();  // Java5 good style 
String[] values = request.getParameterValues("ToList");  // General style 

if (values != null)           // No crashes 
    courseNames.addAll(Arrays.asList(values));    // Implicit loop 

В качестве альтернативы используйте инфраструктуру более высокого уровня (например, Apache CXF), чтобы распаковать значения из запроса, но это гораздо более сложная задача для вас, так как они связаны с написанием кода совсем по-другому.

+0

Thnx для быстрого ответа. Я проверю его сейчас. – david

+0

Привет, мы используем метод dopost в servlet.return тип dopost недействителен, поэтому мы не можем вернуть значения. – david

+0

@david: Нет, я имел в виду, что 'request.getParameterValues ​​(« ToList »)' (который немного длиннее для ввода) способен создавать 'null', независимо от того, что вы находитесь в' doPost контекст. Вы должны проверить, действительно ли это так, и добавлять значения в коллекцию 'courseNames', если это не так. –