ダンジョンズアンドドラゴンズのアイテムをユーザーにとってより簡単にするのに役立つアプリケーションを作ろうとしています!
さまざまな武器のリストが3つあり、統計などが異なります。リストのうち2つはプログラムに問題なく追加されますが、そのうちの1つはNoSuchElementExceptionをスローします。私が持っている他のリストと比較して、そのリストとはリモートで異なるものを見つけることができないので、私は本当に理由を理解していません。
リストの行は次のようになります。
Light Melee Weapon,1d4,1d6,x2,10 ft.,Slashing,Axe (Throwing),8 gp, 2lb.
http://pastebin.com/Fb2db0f1リスト全体へのリンクは、見たい場合に問題を引き起こします。
http://pastebin.com/9Hg0Rw2aも、問題なく機能するリストにリンクしています。
この方法は、あなたが目を通すのに長すぎないことを願っています。私はこれを修正するために考えられるすべてのことを本当にしました。そして、それが問題を引き起こしているリストであると私は確信しています。なぜなら、それが読み取られる宛先からそれを削除するとすぐに、プログラムは問題なく実行されるからです!
動作するリストではforループを正常に実行しますが、最初のリストは動作しません。
Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(StringTokenizer.java:349)
at MainGUI.init(MainGUI.java:60)
at MainGUI.main(MainGUI.java:32)
public HashMap<String,Weapon> init() {
String path = "base";
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
if(listOfFiles.length == 0) {
JOptionPane.showMessageDialog(MainGUI.this, "The folder \"base\" was empty"+
" so no weapons or armor was attempted loaded.", "Warning",
JOptionPane.WARNING_MESSAGE);
return new HashMap<>();
}
HashMap<String, Weapon> weapons = new HashMap<>();
BufferedReader r = null;
for(File f : listOfFiles) {
if(f.getName().endsWith(".txt")) {
String line;
try {
r = new BufferedReader(new FileReader(f));
while((line = r.readLine()) != null) {
Weapon w;
StringTokenizer st = new StringTokenizer(line,",");
while(st.hasMoreTokens()) {
w = new Weapon(WeaponCategory.fromString(st.nextToken()),
st.nextToken(),st.nextToken(),st.nextToken(),
st.nextToken(),st.nextToken(),st.nextToken(),
st.nextToken(),st.nextToken());
weapons.put(w.getName(), w);
}
}
} catch(FileNotFoundException fnfe) {
JOptionPane.showMessageDialog(MainGUI.this, "The File "+
f.getName() + " was not found.", "Error",
JOptionPane.ERROR_MESSAGE);
} catch(IOException ioe) {
JOptionPane.showMessageDialog(MainGUI.this, "There was a problem reading "+
f.getName() + ".", "Error",
JOptionPane.ERROR_MESSAGE);
}
}
}
try {
r.close();
} catch (IOException ex) {
JOptionPane.showMessageDialog(MainGUI.this, "An error occured while"
+ "closing the File Reader Stream:\n"+ex.getMessage(),
"Error", JOptionPane.ERROR_MESSAGE);
}
return weapons;
}