Executar prompt de comando passando parâmetros

Quero converter PDF em SWF, a única solução que achei foi usar o programa PDF2SWF e chamar por linha de comando o programa que gera o swf a partir de um pdf.

Esse é o comando que executa no executar do XP:

"C:\Arquivos de programas\SWFTools\pdf2swf.exe" origem.pdf -o destino.swf

Se eu executo sem as aspas, dá erro que o windows não consegue encontrar o arquivo C:\Arquivos
Ele não acha, por causa do espaço

Se eu fizer assim no Java:

Runtime.getRuntime().exec( "C:/Arquivos de programas/SWFTools/pdf2swf.exe origem.pdf -o destino.swf" );

Vai ser o mesmo que escrever no executar tudo sem aspas ou dentro da mesma e irá dar erro.
Porém também percebi que ao tentar executar outras programas usando a localização do C (pelo executar eu acesso, porém pelo JAVA esses programas não são abertos)

Se eu abro algum programa do Windows usando cmd… ele abre normal.

Porque não estou conseguindo abrir os programas pelos comandos no java?

Tenta postar aspas no seu comando… pois se vc executar no prompt “C:\pastas separadas\comando” funciona e se executar C:\pastas separadas\comando não funciona … assim no Runtime tambem tem que possuir as aspas
assim


    Runtime.getRuntime().exec( "\"C:/Arquivos de programas/SWFTools/pdf2swf.exe origem.pdf -o destino.swf\"" ); 

Tente assim e retorne o resultado

Então esses caracteres de escape para ir com as aspas havia tentado, porém não havia dado certo:

Essa dá mensagem de erro:

java.io.IOException: Cannot run program ""C:/Arquivos": CreateProcess error=2, O sistema não pode encontrar o arquivo especificado Caused by: java.io.IOException: CreateProcess error=2, O sistema não pode encontrar o arquivo especificado

Usando aspas considera como se estivesse tudo junto.E dá o mesmo erro do XP.
Se utilizo sem os caracteres de escape, não dá erro nenhum no console apenas não abre o programa.

Aqui funcionou assim:

public class Teste2 { public static void main(String[] args) { try { Runtime.getRuntime().exec("c:\\Arquivos de Programas\\Mozilla Firefox\\firefox.exe www.aol.com www.cnn.com"); } catch (Exception e) { System.out.println("Zica: "+e.getMessage()); } } }

por favor não consigo executar o Javac… Já configurei JAVA_HOME apontando para o caminho do JDK certinho mais o path onde adicionei o caminho do bin… mas não funciona…

[quote=GradeBook]Aqui funcionou assim:

public class Teste2 { public static void main(String[] args) { try { Runtime.getRuntime().exec("c:\\Arquivos de Programas\\Mozilla Firefox\\firefox.exe www.aol.com www.cnn.com"); } catch (Exception e) { System.out.println("Zica: "+e.getMessage()); } } }[/quote]

Aqui também funcionou, está estranho.Consigo executar qualquer programa.MENOS esse que uso para converter.

Se eu ficar chamando ele diversas vezes ele até fica na memória mas não realiza a conversão
Se eu abrir apenas ele sem passar os parâmetros (pelo executar do windows) ele abre a tela do dos e logo fecha.
Se eu faço isso pelo Java não acontece nada, e não dá exceção nenhuma.

Pensei que pudesse ser a localização errada, mas se eu coloco um com a localização errada da uma exceção.

O que mais pode ser?

Tente fazer dessa forma
Testei aqui e rolou

Runtime.getRuntime().exec("cmd /c \"c:/Arquivos de Programas/Mozilla Firefox/firefox.exe\" www.aol.com www.cnn.com" );

OK Obrigado pelas respostas.

Funciona com QUALQUER programa.Apenas esse não está executando, nem convertendo :S e não da nenhuma exceção no java (isso que eu acho estranho), porém se executa pelo executar do windows converte…

Existe alguma maneira que eu possa descobrir porque não está chamando? (tentei usar exitValue, mas fala que o processo não foi terminado ainda…(

Obrigado pela resposta de todos, porém não irei mais precisar disso.

Estava realizando os testes localmente, e decidi chamar o suporte do servidor para instalar esse programa (para tentar testar no servidor), porém eles não permitem instalar executáveis no servidor por ser compartilhado.

Vi numa threat sobre Runtime.getRuntime().exec() alguém postar esse link aqui: http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1
Pode ser que te ajude.

Galera preciso de ajuda seguinte estava pesquisando sobre o metodo “Runtime” e vi o codigo que vcs estavam
descutindo acima e seguinte eu fiz uma copia do codigo para tentar chamar a janela do MS-DOS mais não funciona,
não da nenhum erro na compilação ou na execução do codigo simplesmente não aparece a janela do MS-DOS
ai esta o codigo.

public class  Dos {  
     public static void main(String[] args) {  
         try {  
                 Runtime.getRuntime().exec("C:\\Windows\\System32\\cmd.exe");  
             } catch (Exception e) {  
             System.out.println("Erro executavel não encontrado:   "+e.getMessage());  
         }  
       } 
       }  

Vlw galera

Quando precisei utilizar o Runtime() segui esse exemplo: