Startup.batdepende de duas variáveis env: CATALINA_HOME e JRE_HOME (ou JAVA_HOME).
Você deve ter JRE_HOME ou JAVA_HOME definido, caso contrário, não poderá executar a inicialização clicando duas vezes.
Isso nos deixa com CATALINA_HOME. O script de inicialização tentará adivinhar se não estiver definido, mas isso funcionará apenas se for executado a partir do diretório atual (ou do pai para ser mais preciso). Se você tentar executá-lo em outro diretório e o CATALINA_HOME não estiver definido, ocorrerá uma falha (com uma mensagem sobre isso).
Se esse for o seu problema, você verá uma mensagem semelhante na parte superior da janela do cmd:
A variável de ambiente CATALINA_HOME não está definida corretamente Esta variável de ambiente é necessária para executar este programa
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 outras pessoas, por isso vou incluir esta informação.
Quando seu comando inclui espaços, você precisa citar seu startcomando, certo? Isso deve fazer:
"cmd.exe /c start \"my path to tomcat bin/startup.bat\""
Errado. Você acaba olhando para a janela de comando intitulada meu caminho para tomcat bin / startup.bat
start leva o primeiro argumento citado como título ... que legal. O formulário correto é:
"cmd.exe /c start \"\" \"my path to tomcat bin/startup.bat\""
Mas espere
esses dois problemas realmente impedirão a exibição da janela do Tomcat - você diz que ela fecha , então ela inicia e depois morre. Hmm ... isso é mais provável porque já existe um processo escutando na porta 8080 . Talvez o seu IDE java inicie o Tomcat? Ou inicia outro servidor ouvindo no 8080? Se essa é a causa, você deve ver uma linha semelhante no log do Tomcat (elas estão armazenadas CATALINA_HOME/logs):
java.net.BindException: Endereço já em uso: JVM_Bind
Se esse for o seu problema, você precisará interromper a primeira instância ou reconfigurar os processos do servidor para que cada um escute em uma porta diferente.
Nota: Eu usei o seguinte para iniciar o Tomcat a partir do 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
cmd /k batchfiledeixará o cmd aberto, mas provavelmente não é o que você deseja. Eu acho que é um problema com caminhos / diretório em execução, causando a falha na inicialização (pois não é possível executar comandos no lote). Também gostaria de sugerir para alterar o título para explicar melhor o seu específico questão