0

Javaで画像を描画しようとしています。次のコードがあります。

public void draw(Graphics g) {
    Image strike_mid;
    strike_mid = Toolkit.getDefaultToolkit().getImage(getClass().getResource("strike_mid.gif")); 


    for (int i=0;i<30;i++) {
        for (int j=0;j<30;j++) {
            if (strikeGrid[i][j]) {
                g.drawImage(strike_mid, i*10, j*10, null);
            }
        }
    }
}

初めてdrawメソッドを呼び出すと、strike_midイメージは描画されませんが、forループにはdrawImageに到達する状態があると確信しています。

もう一度drawメソッドを呼び出すと、描画は成功します。

別の.gifファイルを描画することを選択すると、それも初めて機能するため、これも初めてdrawImageに到達すると確信しています。

では、ここでの問題は何ですか?どうしてstrike_mid.gifで初めて描画されない可能性がありますか?

4

2 に答える 2

3

Swing / AWTを正しく覚えていれば、からのgetImage呼び出しがToolkit戻ってきたからといって、画像がまだ完全にロードされているわけではありません。非同期ロードを調べたり、詳細を確認しMediaTrackerたりできます。ImageObserverとにかく、あなたは間違いなくgetImageコールをドローから外すべきです。ドキュメントで説明されているように、ツールキットはおそらくImageオブジェクトをキャッシュしますが、それを何度もリロードする理由はありません。

于 2012-12-18T13:04:46.620 に答える
1

Tom が述べたように、Toolkitメソッドは通常非同期です。ImageIO.read(File/URL/InputStreamまたは、イメージをロードするためのブロッキング メソッドに ) を使用します。

于 2012-12-18T13:41:13.073 に答える