Я воспроизвел ошибку и нашел работу вокруг
Вот код, скомпилированный в x86_64 GNU / Linux, Fedora с Java 1.5.0:
Scanner r = new Scanner(f, "ISO-8859-1");
while(r.hasNext()){
String line = r.nextLine(); //The guts of nextLine(), specifically:
//Matcher.toMatchResult bubbles up a
//nullPointerException
}
Файл содержит только два слова ascii, разделенных новой строкой.Исключение времени выполнения возникает только тогда, когда nextLine обрабатывает последнюю строку файла, независимо от того, содержит он символы или нет:
java.lang.NullPointerException
at java.util.regex.Matcher.toMatchResult(libgcj.so.10)
at java.util.Scanner.myCoreNext(libgcj.so.10)
at java.util.Scanner.myPrepareForNext(libgcj.so.10)
at java.util.Scanner.myNextLine(libgcj.so.10)
at java.util.Scanner.nextLine(libgcj.so.10)
at Main.parseFile(Main.java:1449)
at Main.construct(Main.java:1420)
at Main.populateBlogPosts(Main.java:1399)
at Main.main(Main.java:263)
Вот отчет об ошибке по этой проблеме: https://bugs.openjdk.java.net/browse/JDK-6178785
Диагностика
Это ошибка в libgcj.so.10, совершенно допустимый ввод ascii, а также пробел заставляет его рвать NPE в последней строке файла.
Обходной путь
Поскольку эта ошибка возникает только в самой последней строке файла, хакерский обходной путь заключается в том, чтобы изначально убедиться, что в конце файла есть хотя бы одна новая строка.затем перехватите и проигнорируйте исключение nullPointerException, всплывающее из toMatchResult, и выйдите из цикла, когда это произойдет.