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方法时,绘图成功。

我确信它也是第一次到达 drawImage,因为当我选择绘制另一个 .gif 文件时,它也是第一次工作。

那么这里有什么问题呢?怎么可能第一次用strike_mid.gif 不画?

4

2 回答 2

3

如果我正确地记得我的 Swing/AWT 的话,仅仅因为getImage来自Toolkit返回的调用并不意味着图像已经完全加载。您可以查看MediaTrackerImageObserver了解有关异步加载的更多信息。无论如何,你绝对应该把跟注getImage拉出平局。该工具包可能会缓存 Image 对象,如文档中所述,但没有理由一遍又一遍地重新加载它。

于 2012-12-18T13:04:46.620 回答
1

正如 Tom 所提到的,这些Toolkit方法通常是异步的。或者使用ImageIO.read(File/URL/InputStream) 作为加载图像的阻塞方法。

于 2012-12-18T13:41:13.073 回答