Java:createImageの完了待ちにprepareImage
こんにちは、管理人イガジーです。
Javaには、処理をスレッドで行なうメソッド(関数)があります。
例えば、createImage というリソースを読み込むメソッドは
スレッド処理されるので、直後にその読み込んだリソースを
使おうとしても、読込未完了で使えない事があります。
例えば、
Image img;
という関数を書いておき
public void read_resouce(String filename) {
URL url = this.getClass().getResource(filename);
try {
img = this.createImage((ImageProducer)url.getContent());
} catch(Exception ex){
System.out.println(filename + " is not found!");
System.exit(1);
}
}
コンストラクタで、
read_resource("/com/mltlab/sample.png");
などと、直後に使おうとしても、描画されません。
g.drawImage(img,0,0,null);
対処としては、prepareImage を使います。
prepareImage は、読込完了していれば true,
未完であれば false を返します。
public void wait_resouce() {
コンストラクタでは
int t;
for (t=0;!this.prepareImage(imc,this);++t){
sleep(10);
}
System.out.printf("prepare %d\n", t);
}
public void sleep(long msec) {
try {
Thread.sleep(msec);
} catch (InterruptedException e) {}
}read_resource("/com/mltlab/sample.png");
という感じで、完了待ちをすれば無事に表示されます。
wait_resouce();
g.drawImage(img,0,0,null);
なお、createImage は、Frame 内で使います。すなわち、
img = this.createImage((ImageProducer)url.getContent());
の this は、Frame です。
この記事へのコメントはこちら