• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:HashSetのremoveで例外発生します)

HashSetのremoveで例外発生します

このQ&Aのポイント
  • JavaのHashSetのremoveメソッドを使用する際に、例外が発生してしまいます。
  • 具体的には、Objectの保存メソッドにおいて、delHogeIdSet.removeの記述で「java.util.ConcurrentModificationException : null」という例外が発生します。
  • この問題について、解決方法を探しています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

もう少し確認させてください。 例外の発生箇所はdelHogeIdSetもしくはaddHogeIdSetのremoveの所ですか? それともobjectHogeDao.deleteByHogeIdの所ですか? 例外は毎回必ず発生しますか? saveObject(ObjectDto objectDto)の呼び出し側はどの様な実装になってますか? 後はひとまず推測ですが、臭そうな所を当たってみますと、 外側で更にコレクションを回していたりしませんか? (例えばdaoがデータをキャッシュしていて、それを直接回していたりはしませんか?) また、スレッドで動作している場合は適切な同期処理が入っていますか?

kahotaka
質問者

お礼

回答ありがとうございます。 システムをFlex+javaで開発しているため、saveObject(ObjectDto objectDto)の処理は Flex側から呼び出されます。 saveObjectを含むClassはHogeService.javaとし、RemoteObjectとしてFlexと連携され ています。 例外は毎回発生します。 ただ、開発環境(ローカルPC)では発生しません。(これが意味不明で、トレースもしにくい 状況なのですが…) サーバへアップすると毎回発生します。removeする件数が多いと発生するのかも…と思ったのですが、 条件が変わっても同じでした。 ただ、removeの処理がが発生しない場合は例外も発生しません。 ループの中でremoveするのではなく、removeするコレクションを別に作って分けるしかないでしょうか?

kahotaka
質問者

補足

スミマセン!!訂正します。 removeが発生しない(と思われる)処理でもエラー発生していました… ということは、removeだけの問題ではないということですね… ただ、ローカル環境では発生しないのに、サーバ(高スペック)にあげる と発生するのはかわりませんでした。 掲示した処理外を通るばあいは発生しませんので、やはりこの処理の記述 の問題だとは思いますが…

その他の回答 (2)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

このコードでは判断できないわね。 ここに記述している以外の要素がかかわっているんじゃないかしら。

kahotaka
質問者

お礼

回答ありがとうございます。 このコードを追記する前は問題なく動いていたのと、ログを見るとこの処理のところで エラー発生しているようでしたので。。。 コレクションのremoveを実施しているのはここだけのはずなのですが… もう少しソースチェックもしてみます。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

コレクションをループ中に そのコレクションからremoveすると発生します。 なのでこういう場合は 新規のコレクションを作成し removeしないものをそっちにコピーするか remove対象のインデックスを覚えておいて ループ処理後にインデックス指定でremoveしてください。

kahotaka
質問者

お礼

回答ありがとうございます。 上記につきましてはいろいろと情報で知っていたので、removeするオブジェクトは 別に作成して実行する(わかりにくいかもですが)ようにしています。 にもかかわらず発生しているため、対応がわからず困っています。 提示しているコード(なぜかインデントがなくなっていますが(-_-;))でお気づきの 事があれば教えてください。 よろしくお願いします。

関連するQ&A

専門家に質問してみよう