2011-11-08 15 views
0

GUIを使用してJavaアプリケーションを作成しようとしています。 私は、ユーザーがデータを変更してこれらの変更をテキストファイルに保存させるコードを書いています。それを行う前に、リストから変更された古いデータを削除し、新しいデータを最後のchange.ifで書き直したいと思っています。見たいクラスが見つからない場合は、できるだけ早くオンラインにしてください。java.util.ConcurrentModificationException例外エラー

これは私の

​​

これはSaveOnFile方法である: ます。public void SaveOnFile(){

String scoresInString; 
    FileWriter fw; 
    try { 

     fw = new FileWriter("footBall"); 

     for (Competitors C : CompetitorsList) { 
      if (C instanceof footBall) { 
       footBall Scores = new footBall(); 
       scoresInString = Scores.returnScoreAsString(C.scores); 
       fw.write(C.playerNumber + ", " + C.name.getFullName() 
         + ", " + C.level + ", " + scoresInString + "," 
         + ((footBall) C).footSize() + "\n"); 
       fw.write("\r\n"); 
      } 

     } 

     fw.close(); 

    } 
    // message and stop if file not found 
    catch (FileNotFoundException fnf) { 
     System.out.println("File not found "); 
     System.exit(0); 
    } 
    // stack trace here because we don't expect to come here 
    catch (IOException ioe) { 
     ioe.printStackTrace(); 
     System.exit(1); 
    } 
} 

答えて

1

コレクションに()を呼び出す削除は、すべてのアクティブなイテレータを無効にします。代わりに、あなたは、Iterator.remove()メソッドを使用する必要があります。

for(Iterator<Competitors> it = CompetitorsList.iterator(); it.hasNext();) { 
    Competitors C = it.next(); 
    if(C instanceof ...) { 
     if(C.getPlayerNumberAsString().equals(Number)) 
      it.remove(); 
    ... 

この方法では、反復子()は知っているがどのようにArrayListを追跡しないので、それ以外のことはできないでしょうコレクションが変化し、それが生成したイテレータ。

+0

速いリプレイをありがとうございました。お手伝いできる場合はもう1つ質問があります。ライティングファイルには空白があります。私はそれをコントロールする方法はありませんか? –

1

また、同じ「for-next」構文を使用し、Iterator構文に変更しない場合は、削除するすべてのオブジェクトを一時的なコレクションに収集します。例えば

ArrayList<Competitors> removeThese = new ArrayList<Competitors>(); 
for (Competitors C : CompetitorsList) { 
    if (wantToRemove(C)) // your number logic goes here... 
     removeThese.add(C); 
} 
CompetitorsList.removeAll(removeThese);