2013-06-06 5 views
0

Я написал приложение Java, которое экспортирует некоторые данные. Вы можете выбирать между excel или xml ouput. После того, как все сделано, я хочу, чтобы созданный файл автоматически открывался.Runtime exec с xml/jdom

Для материала 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, потому что оба раза применение такое же, для одного метода, когда я делаю первенствовать или XML-запись, за исключением. Но до сих пор я не добился успеха. Может ли кто-нибудь помочь мне в этом?

ответ

0

Если файл 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, что он делает для вас?

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

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

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

+0

он открывается вместе с блокнотом ++. Я тестировал код exec для него один, и там он работает нормально. – dawastl

+0

Обновленный ответ с лучшим процессом получения информации о выходе процесса – rolfl

+0

Спасибо за помощь. Я сам нашел проблему. Я не закрыл FileWriter, который использовался для создания XML-документа. – dawastl

Смежные вопросы