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の書き込みを行う1つの方法を除いて、両方のアプリケーションが同じであるためです。しかし、私は今まで成功したことがありません。誰でもこれで私を助けることができますか?

4

1 に答える 1

0

test.xml ファイルが有効な場合、XML ファイルの実行に問題があるのは JDOM のせいではありません。問題は、Windows ファイルと . xml ファイル (または期待する関連付けではない)。

cmd ウィンドウを開くとどうなるか: WinKey->R で実行ダイアログを開き、ボックスに cmd と入力してから、「dos」プロンプトで と入力しますcmd /c D:\test.xml。何が起こるのですか:

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

C:\>

私にとっては Internet Explorer で XML ファイルを開きます。

編集:OK、コマンドラインから開きます。ここで、プロセスをデバッグするために、コマンドから標準出力/エラーを取得する必要があります。次のようなものをお勧めします:

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 に答える