Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:程序在读取txt文件时无法列出其内容_Java_File_Text_Javafx_Static - Fatal编程技术网

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

Java:程序在读取txt文件时无法列出其内容,java,file,text,javafx,static,Java,File,Text,Javafx,Static,我正在开发一个使用JavaFx在列表中显示图标的程序。 我创建了一个静态类,用于从txt文档中查找特定ID。最初,静态块会添加每行上定义的项的id和名称,但由于出现了这些问题,我试图找到问题的根源 相反,我只是浏览了静态块中文本文件的内容,并将其打印到控制台 这是我的代码供参考: public class ItemIds { public static int UNDEFINED_ID = -1; private static HashMap<String, Integer

我正在开发一个使用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;
    }
}
公共类ItemIds{
公共静态int未定义_ID=-1;
私有静态HashMap项;
静止的{
items=newhashmap();
System.out.println(新文件(“res/ids/item ids.txt”).exists();
试一试{
//应该打印出文本文件中的每一行
Files.lines(path.get(“res/ids/item ids.txt”)).forEach(s->{
系统输出打印项次;
});
}捕获(IOE异常){
System.out.println(“无法读取指定的文件”);
e、 printStackTrace();
}
}
公共静态int getId(最终字符串名){
最终整数id=items.get(name);
返回id!=null?id:未定义的\u id;
}
}
然而,当初始化这个静态类并调用静态块时,我得到的是非常奇怪的结果。它列出了每一行,没有错误,直到它到达第10691行,在那里它抛出“线程中的异常”JavaFX应用程序线程“java.lang.ExceptionInInitializerError”

然而,让这一点特别奇怪的是,当我使用较小的文本文档(条目较少)时,一切似乎都正常工作。由于该文件由近14000行组成,我必须删除约4000行才能正常工作


你知道为什么会这样做吗?非常感谢您的反馈-谢谢

我无法重现此错误。我已经创建了一个18K行的文件,您的程序可以很好地使用它。因此,一定要考虑查看文件和堆栈跟踪。

现在回到您的异常异常InInitializeError,以下是一个可能的错误:

ExceptionInInitializerError表示静态初始值设定项中发生意外异常。抛出ExceptionInInitializerError以指示在计算静态初始值设定项或静态变量初始值设定项期间发生异常

class ItemIds
{
  static
  {
     // if something does wrong -> ExceptionInInitializerError
  }
}
因为静态变量是在静态块中初始化的,所以也有可能引入错误。例如:

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

因此,如果foo()变得疯狂,那么您可以得到ExceptionInInitializeError


您在静态块中展示了完整的代码吗?

请展示整个stacktrace…我被迷惑了,为什么您要在模型类的静态块中放置这种文件密集型代码?为什么不在正确初始化代码后,从UI中适当地调用该代码?@ManoDestra[bamboozling increases]如果我想在静态类中初始化它,我会把它放在哪里?
class ItemIds
{
  static int v;

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