繁体   English   中英

Java:程序无法从其中读取时列出txt文件的内容

[英]Java: Program not able to list contents of txt file when reading from it

我正在使用JavaFx在列表中显示图标的程序上工作。 我制作了一个静态类,用于从txt文档中查找特定ID。 最初,静态块会在每行中添加定义的项的ID和名称,但是由于出现了这些问题,因此我尝试查找问题的根源。

相反,我只是浏览了静态块中文本文件的内容,并将其打印到控制台。

这是我的代码供参考:

public class ItemIds {
    public static int UNDEFINED_ID = -1;
    private static HashMap<String, Integer> items;
    static {
        items = new HashMap<String, Integer>();
        System.out.println(new File("res/ids/item ids.txt").exists());
        try {
            //should print out every line in the text file
            Files.lines(Paths.get("res/ids/item ids.txt")).forEach(s -> {
                System.out.println(s);
            });
        } catch (IOException e) {
            System.out.println("Unable to read specified file.");
            e.printStackTrace();
        }
    }

    public static int getId(final String name) {
        final Integer id = items.get(name);
        return id != null ? id : UNDEFINED_ID;
    }
}

但是,初始化此静态类并调用静态块时得到的结果很奇怪。 它列出每一行都没有错误,直到到达10691行,然后在该行引发“ JavaFX应用程序线程中的异常” java.lang.ExceptionInInitializerError。

但是,这使我特别奇怪的是,当我使用较小的文本文档(条目较少)时,一切似乎都可以正常工作。 由于该文件包含将近14000行,因此我必须删除〜4000行才能使用。

关于为什么要这样做的任何想法? 任何反馈表示赞赏-谢谢

我无法重现此错误。 我已经创建了一个包含18K行的文件,并且您的程序运行正常。 因此,绝对要考虑检查您的文件以及堆栈跟踪。

现在回到异常ExceptionInInitializerError ,可能是以下情况:

ExceptionInInitializerError表示静态初始化程序中发生了意外的异常。 抛出ExceptionInInitializerError表示在评估静态初始化程序或静态变量的初始化程序期间发生了异常。

class ItemIds
{
  static
  {
     // if something does wrong -> ExceptionInInitializerError
  }
}

由于静态变量是在静态块中初始化的,因此也有可能引入错误。 一个例子:

class ItemIds
{
  static int v = D.foo();
}

=>

class ItemIds
{
  static int v;

  static
  {
    v = D.foo();
  }
}

因此,如果foo()变得疯狂,则可以获取ExceptionInInitializerError。

您是否以静态块形式展示了完整的代码?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM