-1

我编写了一个方法,可以成功地将数组中的数据导出到 Excel 文件中。但是,我希望 Java 在 Apache POI 完成编写后自动打开新创建的 Excel 文件。

我的代码如下所示:

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 回答