重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

表題について質問させて下さい。
通常重たい処理はスレッドで処理し、逐次プログラムを
進めていくのが定石!?なのでしょうが、今回はPNGファイルを
作成(重たい処理)して、そのファイルができるまで処理を
止めておきたいのですが可能でしょうか??

//JFreeChartでPNGデータを作成
ChartUtilities.saveChartAsPNG(file, chart, 540, 240);

//PNGデータが作成されるまで待機
//file(PNGデータ)が存在するまでループ
while(file.exists()){
sleep(1000); //sleep関数はwait(Object型)で自作実装
}

(ChartUtilities.saveChartAsPNGはファイル生成してから次に
 進むのではなく、生成前でも次に進みます。スレッドで実装
 している??)

このソースだと、システムの状態!?を確認・更新していないので
「ファイルが無い」と無限ループします。(もちろんですが...)
DelphiですとApplication.ProcessMessagesで状態を更新させれる
(ファイルが存在するか確かめれる)のですが、Javaでこれに変わる
命令文などありますでしょうか??
(↑の文章を ネットで調べるためのキーワードが重い浮かびません
でした。無知ですみません。)

そもそも、もっと違った方法で実現するのでしょうか??
皆様ご教授願います。

OS : WinXP SP3
JVM: 1.6.0_10-b33

A 回答 (1件)

jfreechart-1.0.12で確認したけど


スレッドなんか使ってなかったわ。
普通に処理が終了するようよ。
生成される前に先に進んでしまうはずないんだけど。

状態の更新が何を言っているのかわからないけど
file.exists()
は現在の状態を確認しているわ。
仮に、ChartUtilities.saveChartAsPNGの変わりに
file.createNewFile()
してあげればfile.exists()==trueを得られるのが確認できるはず。


そんなわけで、何かもっと別の要因があるんじゃないかと
思うんだけど。
    • good
    • 0
この回答へのお礼

askaaskaさん回答ありがとうございます!!
askaaskaさんの指摘通り別の要因でした。

//JFreeChartでPNGデータを作成
ChartUtilities.saveChartAsPNG(file, chart, 540, 240);

//PNGデータが作成されるまで待機
while(file.exists()){
 sleep(1000);
}

↑の【file】はChartUtilities.saveChartAsPNGを実行する前に
定義したものですので、実行前の【file】をループで調べても
出てくるはずがございませんでした。ファイルが作成されると
【file】内のデータも勝手に更新されると勘違いしておりました。
ChartUtilities.saveChartAsPNGを実行後に保存先のフォルダを
File型で参照すると無事検知できました。こんな初歩的なことで
ミスを発見できなくて恥ずかしい限りです。

本当にありがとうございました。

お礼日時:2009/04/17 13:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!