Javaファイルの生成確認と重たい処理の待機方法

このQ&Aのポイント
  • 通常重たい処理はスレッドで処理し、逐次プログラムを進めていくのが定石なのですが、PNGファイルを生成する場合、そのファイルができるまで処理を止めたい場合、どのような方法がありますか?
  • ファイル生成後に処理を進めるのではなく、ファイルが存在するまで処理を待機するための方法を知りたいです。
  • DelphiのApplication.ProcessMessagesに相当する命令文や、違った方法があれば教えてください。
回答を見る
  • ベストアンサー

Java ファイルが生成させたか確認したい

表題について質問させて下さい。 通常重たい処理はスレッドで処理し、逐次プログラムを 進めていくのが定石!?なのでしょうが、今回は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

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

jfreechart-1.0.12で確認したけど スレッドなんか使ってなかったわ。 普通に処理が終了するようよ。 生成される前に先に進んでしまうはずないんだけど。 状態の更新が何を言っているのかわからないけど file.exists() は現在の状態を確認しているわ。 仮に、ChartUtilities.saveChartAsPNGの変わりに file.createNewFile() してあげればfile.exists()==trueを得られるのが確認できるはず。 そんなわけで、何かもっと別の要因があるんじゃないかと 思うんだけど。

Web_Master
質問者

お礼

askaaskaさん回答ありがとうございます!! askaaskaさんの指摘通り別の要因でした。 //JFreeChartでPNGデータを作成 ChartUtilities.saveChartAsPNG(file, chart, 540, 240); //PNGデータが作成されるまで待機 while(file.exists()){  sleep(1000); } ↑の【file】はChartUtilities.saveChartAsPNGを実行する前に 定義したものですので、実行前の【file】をループで調べても 出てくるはずがございませんでした。ファイルが作成されると 【file】内のデータも勝手に更新されると勘違いしておりました。 ChartUtilities.saveChartAsPNGを実行後に保存先のフォルダを File型で参照すると無事検知できました。こんな初歩的なことで ミスを発見できなくて恥ずかしい限りです。 本当にありがとうございました。

関連するQ&A

  • 画像フォーマット変換 JPEG -> PNG

    現在、JavaのWebアプリを作成しています。 帳票出力にExcelファイルのダウンロードがあります。そのExcelファイルには、画面からアップロードされた画像(JPEG)を貼り付けなければなりません。Excelワークブック生成には JExcel を使うつもりです。しかし、JExcel が貼り付け可能な画像が PNG形式だけなのです。 そこで、 JPEG形式のバイト列(アップロードされた画像データ) ↓ PNG形式のバイト列( JExcel のExcel生成中に使用するデータ) という処理ができなく困っています。 JPEG形式の画像ファイルを JVM に取り込み PNG形式の画像ファイルを吐き出すという処理なら出来ているのですが、 JVM 内だけで JPEG -> PNG ができないのです。 ヒントになることでもよいので、何か情報をいただければ幸いです。

    • ベストアンサー
    • Java
  • java スレッドの作り方

    はじめまして☆ 課題で、「あるディレクトリのデータファイル(テキストファイル)を定期監視し、ファイルがあれば読み取って出力するjavaプログラムを作成しなさい」と出されました。 そこで、定期時間に繰り返し監視しながら、ファイルがあれば処理するために、ファイル処理スレッドを作りたいのですがスレッドを作ったことが無く、まったくわかりません(>_<) 誰か教えてください!!

  • C# Excelファイルを生成したい

    只今Excelファイルの出力について悩んでいます。 DataGridViewやListViewのデータをExcelに吐き出そうと思っています。 が、ネットで色々と調べてもよくわかりません・・・ サンプルソースは出てくるのですが、何が必要でどのようなことができるのかが いまいちピンと来なく、なかなか実現に至っていません。 やりたいことは  ・新規作成するExcelファイルの名前を任意で入力  ・保存先を指定  ・DataGridViewなどの入力データをExcelにそのまま吐き出す です。 分からないのは  ・Excelファイルを生成して保存してからデータを入れるのか(処理の順番)  ・データ挿入はどうやるのか  ・そもそもExcelファイルの生成と保存の仕方 プログラミング初心者なので、いまいち把握しきれません できれば97-2003ブックに対応したものをと思っています。 手順など分かる方、よろしくお願いします。 念のため開発環境とExcelのバージョンを・・ VisualStudio2008 C# OS:XP Excel:2007

  • ループマクロ起動時に他のエクセルファイルが起動できない

    VBAでメインループをずっとループさせ、 データが送られてきたらそれを受け取り処理をするマクロを作っています。 Do DoEvents Sleep 1 データが送られてきていれば処理 Loop という風にしているのですが、このマクロを起動中だと他のエクセルファイルが開けないのです。 他のファイルをダブルクリックしても、起動中のこのマクロのエクセルが前面にくるだけです。 なにか特別な処理をループ中にいれなければならないのでしょうか?

  • is_fileでチェックを繰り返しているファイルを消す

    PHP4.3.2をRedhatES3/Apache2.0上で動かしています。 ファイルが存在するか簡単なチェックをしたくて、以下のような記述をしています。 while(is_file($指定ファイルA)==true){  print "ファイルがあるので3秒スリープします";  sleep(3); } $指定ファイルAがある限りループし続けるつもりだったのですが、この処理を動かしている途中で$指定ファイルAを削除しても、ループから抜けてくれません。 別ファイルからunlink($指定ファイルA)したり、Linux上で指定ファイルの名前を変えてみるなどしてみましたが、処理が止まることなくずっと続いてしまいます。 最初から$指定ファイルAが無いとループしないため、どこでPHPが指定ファイルAを認識しているのかわからず詰まってしまっています。 原因がなんなのか、もしくは上記のようなことをする場合、別な方法だとすぐ解決できるというのがあるのでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • スレッドが実行中かどうかの確認

    画面の中にボタンを作成し、そのボタンを押すとスレッドが実行される機能を作成しました。 「一度ボタンを押してスレッドが実行中の場合は処理を実行しない」 という処理を実装したいです。 上記の処理を以下のソースで考えていますが(1)の部分がわかりません。 そもそも(1)のようなことが可能かもわかっていない状況です。 (1)のようなことは可能なのでしょうか? どなたか、知恵を貸していただければと思います。 よろしくお願い致します。 /* ソース */ public class ExThread1 extends Thread{  public void run() {   // 処理  } } public class TEST {  public static void main(String[] args){   ExThread1 thread1 = new ExThread1();   // (1)スレッドが実行中ならstartしない   if(スレッドが実行中ではない){    thread1.start();   }  } }

    • ベストアンサー
    • Java
  • [VC++] AfxBeginThreadで生成したスレッドの監視方法について

    お世話になります。 VC++でスレッドプログラムを作っています。 AfxBeginThreadでワーカースレッドを作成し、その中でダイアログを表示する プログラムです。 問題は、ワーカースレッドがある処理状態に至ったことを メインスレッドで検知したいのですが、それがうまく いかないということです。 コードの概略をしめします。 <メインスレッド側> void CTestApp::OnTest() {   CTestDlg dlg;   dlg.IsContinue = FALSE;   pThread = AfxBeginThread(TestDlg::Thread, (void*)&dlg);   while (!dlg.IsContinue) { // <----問題:このループ処理を抜けれない!    Sleep(0);   } } <ワーカースレッド側> UINT TestDlg::Thread(LPVOID pParam){   TestDlg* pDlg = (TestDlg*)pParam;   pDlg->Create(TestDlg::IDD);   pDlg->ShowWindow(SW_SHOW);     pDlg->IsContinue = TRUE; //<--ここでフラグを変更しているのに。   while(pDlg->IsContinue) {    MSG msg;    if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {      ::TranslateMessage(&msg);      ::DispatchMessage(&msg);    }   }   pDlg->DestroyWindow();   return 0; } ---- メインスレッドのSleep(0)で待つのを AfxGetApp()->PumpMessage()に変更すると ループを抜けるようなのですが、どうも納得できません。 上記のプログラムで問題、もしくはプロジェクトの 設定等に不備がある可能性がありましたら 御教授いただけたら幸いです。 よろしくおねがいいたします。

  • JAVAでJfreeChartを用いたプログラムの実行

    JAVAでJfreeChartを用いたプログラムの実行 質問失礼します. 現在,javaでグラフを表示させるプログラムを作成しています. ○開発環境:eclipse3.5. ○JfreeChart:jfreechart-1.0.13.jar , jcommon-1.0.16.jar 実行に関しての質問なのですが, eclipseからの実行は問題ないのですが, コマンドプロンプトから実行を行うと以下のエラーが出てしまいます. Exception in thread "No.1]" java.lang.NoClassDefFoundError: org/jfree/data/general/PieDataset 環境変数の問題と自分なりに考えて設定を変えてみたりしたのですが,いまだに解決できない状態です. (環境変数あたりには詳しくないのでやり方がまずいのかもしれないですが...) わかる方いましたら回答よろしくお願いします.

    • ベストアンサー
    • Java
  • javaで大容量テキストファイルの読み込みについて

    お世話になっております。 現在javaにて大容量のテキストファイル(100M以上)を読み込んで、 特定の文字が含まれている行のみを別ファイルへ抽出するという プログラムを作成しています。 現在のロジックでは、 File file = new File( "読み込みファイル" ); byte[] b = new byte[ (int) file.length() ]; FileInputStream fis = new FileInputStream(file); fis.read(b); String str = new String(b, "Shift-JIS"); return str; 上記の様なのようなロジックのメソッドを作成し、 返り値の文字列を改行コードでsplitし、パターンマッチングして行を抽出する方法をとっています。 しかしこの方法だと、OutOfMemoryErrorが発生していまい、 30MB以上のファイルを読み込むことができません。 原因がJVMのメモリ領域の問題なのは理解していますが、 readLineをでためしてみると処理終了があまりにも遅すぎるため、 なるべく現在の手法を改良する方向で作成したいのですが、 一回目 :0 ~ 30000000byte まで 二回目 :30000001 ~ 60000000byte まで の様にJVMの設定はいじらない方法でファイルのデータを、 指定バイトから指定バイトまで読み込む方法等なないでしょうか? それ以外でも処理が早く、 大容量のテキストファイルを読み込む方法がありましたら、 そちらでも問題ありません。 ぜひとも知恵をお貸しください。 宜しくお願いします。

    • ベストアンサー
    • Java
  • 静的HTML生成

    お世話になります。 テンプレートが存在して、その中にデータをはめ込み それをHTMLとして保存するという 静的HTMLを生成するプログラムを作成しようと思っています。 動的に生成された仮のHTMLを静的HTMLとして保存する仕組みが わかりません。 そのアルゴリズムのご教授願います。 それについて表記されているURLでもかまいません。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう