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);
После внесения этих изменений проверьте (и, возможно, опубликуйте здесь...) содержимое файла ошибок и выходных файлов.