Библиотека Zip4j Метод ZipFile.setPassword () генерирует исключение NullPointerException при ненулевом вводе

1

Я зацикливаю буферизованного читателя, чтобы вытащить строки из словаря, добавить их в ArrayList, а затем запустить их позже в программе. В течение этого 15 000 000 строк словарь, пустые строки появляются примерно каждые 30 000 строк. Я не ожидаю, что все пользователи этой программы будут использовать словарь, который я включаю, и я не хочу вручную выделять и стирать каждую пустую строку. Когда программа встречает эту строку, она бросает надоедливое исключение NullPointerException, немедленно убивая программу. Я попытался добавить try/catch, чтобы добавить строку, если она не пустая и передать строку с нулевым использованием continue. Как всегда, здесь мой код:

                String line;
                if ((line = br.readLine()) != null) {
                    try{
                        passwordArray.add(line);
                        System.out.println(line);
                    } catch(NullPointerException npe){
                        System.out.println("The line is null.");
                        continue;
                    }
                }

Трассировки стека:

Exception in thread "main" java.lang.NullPointerException
    at net.lingala.zip4j.core.ZipFile.setPassword(ZipFile.java:650)
    at zZipCracker.zZipCracker.zZipCracker(zZipCracker.java:96)
    at zZipCracker.zZipCracker.main(zZipCracker.java:55)

Строка 96:

zipper.setPassword((String) passwordArray.get(0));

Если посмотреть на строку 96, пустая строка добавляется и не может выполняться, потому что для библиотеки, которую я использую, требуется пароль, длина которого больше 0. Строка 55 - это просто вызов метода, когда весь этот процесс завершен.

  • 1
    Что бросает NPE - это passwordArray.add(line) ? Можете ли вы опубликовать трассировку стека? br.readLine() должен возвращать пустую строку, а не нуль, если строка пустая. Проверьте это !line.isEmpty() перед отправкой.
  • 0
    Добавлена трассировка стека. Глядя на строку 96, добавляется пустая строка, и она не может быть запущена, поскольку используемой библиотеке требуется пароль, длина которого больше 0.
Показать ещё 7 комментариев
Теги:
loops
while-loop
nullpointerexception

1 ответ

2

Вероятно, проблема заключается в том, что ваша строка пуста, а не null. Вот код для заданного пароля:

648     public void setPassword(String password) throws ZipException {
649         if (!Zip4jUtil.isStringNotNullAndNotEmpty(password)) {
650             throw new NullPointerException();
651         }
652         setPassword(password.toCharArray());
653     }

Вам нужно изменить:

if ((line = br.readLine()) != null) {

чтобы:

line = br.readLine();
if (line != null && line.length() > 0) {

Ещё вопросы

Сообщество Overcoder
Наверх
Меню