Runtime.exec só funciona se o arquivo for .exe ou .com; nem para .bat ou .cmd funciona.
Para iniciar um arquivo .pdf:
Java 6.0 -> use a classe java.awt.Desktop:
/** ATENÇÃO - REQUER JAVA 6.0 OU POSTERIOR */importjava.awt.Desktop;importjava.io.File;importjava.io.IOException;classTesteDesktop{publicstaticvoidmain(String[]args)throwsIOException{Desktop.getDesktop().open(newFile("teste.pdf"));}}
Antes do Java 6.0 -> use Runtime.exec mesmo, mas com o comando "start" : Runtime.getRuntime().exec (new String[]{"cmd.exe", "/c", "start", "teste.pdf"});
Bom, preciso testar isso em um Linux para ter certeza disso.
Olhando o código-fonte do JDK, no caso do Linux e Solaris, dá a impressão que ele chama a API do Gnome “gnome_url_show” (no Windows ele chama “ShellExecuteW”).
Isso quer dizer que se você tiver um Linux que não tem absolutamente nada do Gnome instalado, você não vai conseguir fazer isso rodar.