To com uma dúvida sobre executar comandos do dos pelo java, pesquisei um monte e sempre dizem pra usar o seguinte comando:
Runtime.getRuntime().exec("cmd /c pause")
Pelo o que eu entendi, isso faria abrir o cmd, e passar o comando “pause” pra ele, e ficar aguardando eu precionar alguma tecla, mas coloquei esse comando, mandei compilar e executar, e nada acontece, ele inicializa e já termina, sem abrir nada de dos na tela.
Tentei também:
Runtime.getRuntime().exec("notepad")
e funciona normal, executo e abre o bloco de notas.
Velho ta certo seu comando mas quando você executa um comando com o Runtime a classe te retorna outra classe chamada process e ela tem a saida e entrada do programa(ou seja não é exibido na tela vai para um InputStream), segue um exemplo para você ter uma ideia.
flw
Se você quer esperar o comando acabar, você deve pegar o Process que representa o programa em execução e chamar o método waitFor().
Process processo = Runtime.getRuntime().exec("notepad");
int result = process.waitFor();
O result contém o código de saída do programa (o mesmo que vc passa como parâmetro para a função System.exit do Java).
É uma boa prática esvaziar os streams do processo, como já te mostraram, pois alguns programas jamais finalizarão se você não fizer isso. Os stream contém o que sai no System.out e no System.err. Já postei uma classe no GUJ que faz isso em threads separadas:
G
gilsonmandalogo
Tentei com os 2 exemplos, compilou, executou, mas nada do DOS aparecer
ViniGodoy
Ahhhhh… A telinha do prompt de comando não vai aparecer mesmo.
Você deve jogar os streams do processo para uma caixa de texto, e usa-los para capturar o teclado, fazendo você mesmo o que o prompt de comando faz.
esdras_63
Se eu não me engano o Windows vista e 7 não tem mais DOS né??
ViniGodoy
Não tem mais DOS desde o Windows 95, que passou a ser um SO completo.
O prompt é chamado de prompt de comando.
Mas com o a sintaxe do prompt é muito similar ao DOS (que é outro sistema operacional), o povo ainda chama assim.
Dos é a sigla de Disk Operating System.
esdras_63
Não tem mais DOS desde o Windows 95. Passou a ser chamado de prompt de comando.
Mas com o a sintaxe do prompt é muito similar ao DOS, o povo ainda chama assim.
Mas os antigos comandos do DOS existia até o Windows XP né?
G
gilsonmandalogo
Não, os antigos comandos do DOS estão até no windows 7.
Mas enfim, meu objeto não é aparecer o DOS, se ele aparecer ou não, não me importa, apenas quero que ele execute meu comando, e isso não está ocorrendo
G
gilsonmandalogo
Não tem mais DOS desde o Windows 95, que passou a ser um SO completo.
O prompt é chamado de prompt de comando.
Mas com o a sintaxe do prompt é muito similar ao DOS (que é outro sistema operacional), o povo ainda chama assim.
Dos é a sigla de Disk Operating System.
Acho que windows 95 não é um SO completo, que eu me lembre ele era um programa que rodava dentro do DOS, só o 98 passou a ser um SO completo, não tenho certeza disso, mas é o que eu me lembro
ViniGodoy
O Runtime.exec não está disparando nenhum exception? Ele normalmente dispara quando não consegue executar o comando.
Sobre o DOS. O Windows 95 foi mesmo um sistema de transição. Ele controlava parte das tarefas (como o sistema de arquivos) e ao mesmo tempo era compatível com drivers do DOS.
O DOS, como sistema operacional, foi morto em 98. Mas seu prompt de comando é realmente usado até hoje. Não significa que o Windows use ou dependa do DOS hoje em dia, você pode instalar qualquer prompt no Windows, inclusive o do Linux, através do Cygwin.
G
gilsonmandalogo
Não, o console fica em branco no fim da execução, nenhum erro ocorre, e estou usando dentro de um try, e no catch mando mostrar os erros, da forma padrão
ViniGodoy
Você redirecionou o Stream para alguma saída (JTextArea ou outputStream), com a classe que indiquei ali em cima? Nessa saída tb não apareceu nada?
G
gilsonmandalogo
você se refere ao “Process processo” ?
ViniGodoy
Sim, a redirecionar os streams do Process, conforme mostro no link.