0

我编写了一个导出一些数据的 java 应用程序。您可以在 excel 或 xml 输出之间进行选择。一切完成后,我希望创建的文件自动打开。

对于 Excel 的东西,我使用 JExcelAPI,而要创建 XML,我使用 JDOM。

我有一个方法 openFile() 在应用程序退出之前最后被调用:

private void openFile(File file) {

    try {
        String[] cmds = { "cmd", "/c", file.getAbsolutePath() };
        for (String s : cmds) {
            System.out.println(s);
        }

        Runtime rt = Runtime.getRuntime();
        Process proc = rt.exec(cmds);
        int exitVal = proc.waitFor();
        System.out.println("Process exitValue: " + exitVal);

    } catch (Throwable t) {
        t.printStackTrace();
    }
}

当我使用 Excel 选项时,文件打开得很好,openFile() 的输出如下:

cmd
/c
D:\test.xls
Process exitValue: 0

使用 XML 输出我将无法工作,尽管我可以手动打开文件就好了。

cmd
/c
D:\test.xml
Process exitValue: 1

所以我想问题出在 JDOM 的某个地方,因为这两次应用程序都是相同的,除了我进行 excel 或 xml 编写的一种方法。但是直到现在我还没有成功。有人可以帮我吗?

4

1 回答 1

0

如果 test.xml 文件是有效的,那么执行 XML 文件时出现问题几乎不是 JDOM 的错……问题更可能是因为您没有与 . xml 文件(或不是您期望的关联)。

打开 cmd 窗口时会发生什么:WinKey->R 打开运行对话框,在框中键入 cmd,然后在 'dos' 提示符处键入cmd /c D:\test.xml。怎么了:

C:\>cmd /c C:\pnp64.xml

C:\>

对我来说,它在 Internet Explorer 中打开 XML 文件,它对您有什么作用?

编辑:好的,所以它从命令行打开。现在,要调试进程,您需要从命令中捕获标准输出/错误。我推荐类似的东西:

ProcessBuilder pb = new ProcessBuilder(cmds);
pb.redirectError(new File("C:\TEMP\process.error.log"));
pb.redirectOutput(new File("C:\TEMP\process.output.log"));
Process proc = pb.start();
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);

完成这些更改后,检查(并可能在此处发布...)错误和输出文件的内容。

于 2013-06-06T15:42:29.193 回答