虽然循环没有目的?

Kev*_*n M 2 java while-loop

在阅读Java教程书时,我遇到了这段代码:

while(getImage().getWidth(frame) <= 0);

我起初认为这是一个错字,但在整本书中,它在多个地方重复了几次.很遗憾没有解释它的作用,所以我想知道它的目的是什么.从表面上来看,我知道它基本上什么都不做,因为即使它可以返回,true或者false,while语句也没有.这是一个特殊的语法案例吗?事实上,它做了什么?或者这只是毫无意义的代码,恰好不会对代码流产生负面影响(它不会返回任何错误,并且所有内容都按预期运行).

以下是完整的方法,如果它有帮助:

public void load(String filename)
{
    Toolkit tk = Toolkit.getDefaultToolkit();
    image = tk.getImage(getURL(filename));
    while(getImage().getWidth(frame) <= 0);
    double x = frame.getSize().width / 2 - width() / 2;
    double y = frame.getSize().height / 2 - height() / 2;
    at = AffineTransform.getTranslateInstance(x, y);
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*ser 6

从AWT 获取的图像Toolkit异步加载的,这意味着您可以在图像加载完成之前获取Image实例.只要图像未完全加载,其尺寸可能尚未知晓,当您检查图像的宽度和高度时,它将返回负值(-1,-1).循环实现轮询图像尺寸(或此处:宽度),直到加载图像.

当然,这不是推荐的方法(因为它让线程忙于什么).相反,MediaTracker该类可用于等待图像完全加载:

MediaTracker tracker = new MediaTracker(new Canvas());
tracker.addImage(image, 0);
try {
    tracker.waitForAll();
}
catch (InterruptedException ex) {}
Run Code Online (Sandbox Code Playgroud)