首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java5抛出java.lang.NullPointerException中的扫描器类

Java5抛出java.lang.NullPointerException中的扫描器类
EN

Stack Overflow用户
提问于 2012-03-08 18:04:15
回答 2查看 459关注 0票数 1

我在java5中使用了scanner类,下面的代码将抛出一个异常:

代码语言:javascript
复制
Scanner scanner = new Scanner
        (new File(args[0]));
int dealId;
while (scanner.hasNextLine()) {
    dealId = scanner.nextInt();
    System.out.println(dealId);
}
scanner.close();

堆栈跟踪是:

代码语言:javascript
复制
Exception in thread "main" 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.hasNextLine(libgcj.so.10)

有人知道是什么导致了这个异常吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-08 18:21:00

GCJ Home Page建议它“支持1.4个库中的大多数,外加大约1.5个附加库”。

Scanner是在1.5版本中添加的,我怀疑您使用的是GCJ不支持的功能。你需要尝试一些不同的东西,看看你能得到什么。

您不使用OpenJDK/Oracle Java 6或7有什么原因吗?(请不要说是因为性能原因;)

票数 2
EN

Stack Overflow用户

发布于 2017-07-21 11:17:17

我重现了这个错误,并找到了一个解决的方法

以下是在Java /Linux,Fedora和x86_64 1.5.0上编译的代码:

代码语言:javascript
复制
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处理文件的最后一行时,才会发生运行时异常,无论它是否包含字符:

代码语言:javascript
复制
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中的一个bug,完全合法的ascii输入以及空字符串会导致它在文件的最后一行创建一个NPE。

解决方法

由于此错误只发生在文件的最后一行,因此棘手的解决方法是首先确保文件末尾至少有一个换行符,然后捕获并忽略从toMatchResult中冒出的nullPointerException,并在发生这种情况时退出循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9615814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档