バックグラウンドスレッドでBufferedImageを作成および更新しています。画像は、次に示すように、パネルペイントメソッドをオーバーライドすることによってJPanelに描画されます。バックグラウンドスレッドからバッファリングされたイメージを更新する
@Override
public void paint(Graphics g) {
g.drawImage(image, 0, 0, null);
}
バックグラウンドスレッドは、イメージを定期的に更新し、パネルinvalidateメソッドを呼び出します。
この方法で問題が発生しますか?スイングスレッドの読み込みとバックグラウンドスレッドが画像を更新しても問題はありませんか?
おかげ
ベン
これは、画像を更新しているときに(AWTスレッド経由で)描画している場合は問題があります。スレッド同期。 – Adrian
"Swingプログラムは' paint() 'をオーバーライドする代わりに' paintComponent() 'をオーバーライドする必要があります。" - [AWTとSwingのペイント:ペイントメソッド](http://java.sun.com/products/ jfc/tsc/articles/painting/index.html#callbacks)。 – trashgod
1)trashgodに言及したことに加えて、 'drawImage'の最後の引数として渡される' null'パラメータは 'ImageObserver'です。 'JPanelはImageObserverを実装しているので、' g.drawImage(image、0、0、this); 'でなければなりません。 2)パネルを埋めるために画像を伸ばしたり、上に他のコンポーネントを追加したりしない限り、表示するには 'JLabel'を使います。 3)イメージを伸ばすが、コンポーネントをオーバーレイしない**場合は、 'JComponent'でレンダリングします。 –