Exec времени исполнения с xml / jdom

Я написал 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 ответ

Если файл test.xml действителен, то вряд ли JDOM виноват в том, что возникла проблема с выполнением XML-файла..... Скорее всего, проблема заключается в том, что у вас нет правильных ассоциаций файлов Windows. XML-файлы (или не те ассоциации, которые вы ожидаете).

Что происходит, когда вы открываете окно cmd: WinKey-> R, чтобы открыть диалоговое окно запуска, введите cmd в поле, а затем в командной строке 'dos' введите cmd /c D:\test.xml, Что просходит:

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

C:\>

Для меня это открывает файл XML в Internet Explorer, что он делает для вас?

РЕДАКТИРОВАТЬ: ОК, поэтому он открывается из командной строки. Теперь, чтобы отладить процесс, вы захотите захватить стандартный вывод / ошибку из команды. Я рекомендую что-то вроде:

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);

После внесения этих изменений проверьте (и, возможно, опубликуйте здесь...) содержимое файла ошибок и выходных файлов.

Другие вопросы по тегам