私は現在 Fractal Explorer プログラムを書いていますが、本当に奇妙な問題に遭遇しています: BufferedImage にフラクタルを描画していて、その画像にランダムな黒い領域が表示されます。スクリーンショット: http://imgur.com/a/WalM7
イメージはマルチスレッドで計算されます: 大きなイメージは 4 つのサブイメージに分割され (4 コア プロセッサを使用しているため)、個別に計算されます。黒い領域は、各サブイメージの先頭に表示されます。それらは常に長方形であり、必ずしもピクセルが計算される順序に従っているとは限りません (左から右ですが、領域は常にサブイメージの向こう側に伸びるとは限りません)。
ピクセルが (Graphics.drawLine を使用して) 描画された直後に、BufferedImage.getRGB がピクセルの正しい色を返すことを確認しましたが、計算が終了すると、ピクセルが画面に描画されるため、代わりに黒が返される場合があります。
マルチスレッド計算を無効にすると (タスク マネージャーを介して javaw.exe に 1 つのコアのみを割り当てることにより)、問題は解消されるようですが、マルチコア計算を放棄する必要はありません。他の誰かがこの問題に遭遇しましたか (Google と stackoverflow で何も見つかりませんでした)、それを修正する方法を知っていますか?
Graphics.drawLine 呼び出しは、Graphics オブジェクトで同期されます。さらに BufferedImage で同期しても、何も変わりません。
バグを自分で確認したい場合は、http://code.lucaswerkmeister.de/jfractalizer/でプログラムをダウンロードできます。GitHub (https://github.com/lucaswerkmeister/JFractalizer) でも利用できますが、最近 GitHub に切り替えたばかりで、最初の GitHub コミットで問題がすでに明らかになっています。