Я зацикливаю буферизованного читателя, чтобы вытащить строки из словаря, добавить их в 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 - это просто вызов метода, когда весь этот процесс завершен.
Вероятно, проблема заключается в том, что ваша строка пуста, а не 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) {
passwordArray.add(line)
? Можете ли вы опубликовать трассировку стека?br.readLine()
должен возвращать пустую строку, а не нуль, если строка пустая. Проверьте это!line.isEmpty()
перед отправкой.