Como manter o console aberto após a execução de um arquivo de lote?

2

Quando eu executo o arquivo startup.bat do Apache Tomcat manualmente, o console do cmd fica aberto, quando eu executo o mesmo no código java, o console é fechado. (Eu estou tentando automatizar alguns processos no meu projeto). Para o Windows, parece que quando o Tomcat é executado como um aplicativo, o console deve permanecer aberto após a execução do .bat.

Como posso fazer isso acontecer no meu código java? Obrigado

    
por Learner 03.08.2012 / 11:49

2 respostas

1

Startup.bat depende de duas variáveis env: CATALINA_HOME e JRE_HOME (ou JAVA_HOME).
Você deve ter o conjunto JRE_HOME ou JAVA_HOME, caso contrário, você não poderá executar a inicialização clicando duas vezes.
Isso nos deixa com CATALINA_HOME. O script de inicialização tentará adivinhá-lo se não estiver definido, mas isso funcionará apenas se for executado a partir do diretório atual (ou se é pai para ser preciso). Se você tentar executá-lo de outro diretório e CATALINA_HOME não estiver configurado, ele falhará (com uma mensagem sobre ele). Se esse é o seu problema, você deverá ver uma mensagem semelhante na parte superior da janela do cmd:

The CATALINA_HOME environment variable is not defined correctly This environment variable is needed to run this program

Outro problema que você pode encontrar é quando seu caminho contém espaços. Parece que o seu não, mas ainda pode ser útil para os outros, por isso vou incluir esta informação.
Quando seu comando inclui espaços, você precisa citar seu comando start , certo? Isso deve fazer: "cmd.exe /c start \"my path to tomcat bin/startup.bat\""
 Errado. Você acaba dando uma olhada na janela de comando intitulada meu caminho para o tomcat bin / startup.bat
start recebe o primeiro argumento citado como título ... que legal. A forma correta é:
"cmd.exe /c start \"\" \"my path to tomcat bin/startup.bat\""

Mas espere

ambos os problemas realmente impedirão que a janela do Tomcat apareça - você diz que fecha , então é iniciado e depois morre. Hmm ... isso é mais provável porque já existe um processo escutando na porta 8080 . Talvez seu java IDE inicie o Tomcat? Ou inicia outro servidor ouvindo em 8080? Se for essa a causa, você deverá ver uma linha semelhante no log do Tomcat (eles estão armazenados em CATALINA_HOME/logs ):

java.net.BindException: Address already in use: JVM_Bind

Se esse é o seu problema, você precisa parar a primeira instância ou reconfigurar os processos do servidor para que cada um escuta em uma porta diferente.

Nota: eu usei o seguinte para iniciar o Tomcat a partir de java, funciona bem para mim:

    Runtime r=Runtime.getRuntime();
    r.exec("cmd.exe /c start startup.bat",          //path to executable
            null,                                   // env vars, null means pass parent env
            new File("my path to tomcat/bin")); // working directory 
    
por 05.08.2012 / 02:25
0

Verifique as propriedades do arquivo .bat (clique com o botão direito), deve haver a opção de manter o console aberto. Última guia, tanto quanto me lembro.

    
por 03.08.2012 / 12:14