-1

配列から Excel ファイルにデータを正常にエクスポートするメソッドを作成しました。ただし、Apache POI が書き込みを完了したときに、新しく作成された Excel ファイルを Java が自動的に開くようにしたいと考えています。

私のコードは次のようになります。

public void exportData(Object[][] data, String[] columnNames) {
    HSSFWorkbook wb = new HSSFWorkbook();

    // Export logic here...

    FileOutputStream fileOut = new FileOutputStream(new File(myFilePath));
    wb.write(fileOut); // Write the Excel file
    fileOut.close(); // Close it
    openFile(); // Open it with Excel
}

public void openFile() { // Excel file opening method
    try {
        Runtime.getRuntime().exec("cmd.exe /c start " + new File(myFilePath));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

次のように動作します。

  • 実行時に exportData() を呼び出すと、Excel ファイルは正常に書き込まれますが、自動的に開かれません。
  • 後で「手動で」 openFile() を再度呼び出すと (たとえば、JButton ActionEvent を介して)、機能します。
  • アプリケーションを NetBeans のデバッグ モードで起動し、段階的に進めると、後で手動で openFile() を呼び出さなくても動作します。

私の推測では、ここではバックグラウンドで何かが行われており、私のプログラムが進行している間は時間がかかると思います。したがって、ファイルを開く準備ができる前にRuntime.exec() が発生する可能性があると思います。

そうですか?それを行うより良い方法はありますか?そうでない場合、それに応じて Runtime.exec() を遅らせるにはどうすればよいですか?

4

1 に答える 1

2

コマンドが機能しない正確な問題が何であるかはわかりません。java.awt.Desktopしかし、一般に、ファイルを開きたいときは、プロセスを生成する代わりにを使用するのが理にかなっています。

だからあなたの場合

Runtime.getRuntime().exec("cmd.exe /c start " + new File(myFilePath));

なる

Desktop.getDesktop().open(new File(myFilePath));

AWT はすべてがスムーズに進むように管理し、この方法でより優れたクロスプラットフォーム サポートを得ることができます。

于 2013-07-10T08:28:44.123 に答える