Bir listedeki simgeleri görüntülemek için JavaFx kullanan bir program üzerinde çalışıyorum. Bir txt belgesinden belirli kimlikleri aramak için kullanılan statik bir sınıf yaptım. Aslında, statik blok her satırda tanımlanmış bir öğenin kimliğini ve adını eklerdi, ancak bu sorunlar ortaya çıktığı için, sorunun kaynağını bulmaya çalıştım.Java: Program okunurken txt dosyasının içeriğini listeleyemiyor
Bunun yerine, metin dosyasının içeriklerini statik blokta geçirdim ve konsola yazdırdım.
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;
}
}
Ancak, bu statik sınıf başlatıldığında olsun ve statik blok çağrılan ne oldukça tuhaf:
Başvuru için benim kodudur. Her satırın 10691 satırına ulaşana kadar hatasız olarak listelenir, burada "iş parçacığında özel durum" JavaFX Application Thread "java.lang.ExceptionInInitializerError" ifadesini atar.
Bunu özellikle garip yapan şey, daha küçük bir metin belgesine (daha az girişli) sahip olduğumda her şeyin iyi çalıştığını gösteriyor. Dosya neredeyse 14000 satırdan oluştuğundan, çalışabilmesi için ~ 4000 satırı silmem gerekiyor.
Bunu neden yaptığına dair herhangi bir fikir var mı? Herhangi bir geri bildirim takdir - teşekkürler
Bütün stacktrace lütfen ... – Seelenvirtuose
Model sınıfındaki bu tür bir dosya yoğun kodunu neden statik bir bloğa yerleştirdiğinizi merak ediyorum. Neden doğru şekilde başlatıldıktan sonra bu kodu UI'nizden uygun şekilde aramıyoruz? – ManoDestra
@ManoDestra [bamboozling intensifies] – flakes