Como sair de um aplicativo java de dentro do programa

145

Qual é a melhor maneira de encerrar um aplicativo Java com código?

Olaseni
fonte
1
Hmm. Eu acho que a pergunta pode ser muito geral. Saia em que circunstâncias?
Allen George
3
Deixe todos os seus threads não daemon terminarem normalmente?
Thorbjørn Ravn Andersen

Respostas:

192

Você pode usar System.exit()para esse fim.

De acordo com a documentação Java 8 da Oracle:

public static void exit(int status)

Encerra a Java Virtual Machine em execução no momento. O argumento serve como um código de status; por convenção, um código de status diferente de zero indica encerramento anormal .

Este método chama o método de saída na classe Runtime. Este método nunca retorna normalmente.

A chamada System.exit(n)é efetivamente equivalente à chamada:

Runtime.getRuntime().exit(n)

Jon
fonte
102
System.exit(0);

O "0" permite que quem ligou para o seu programa saiba que tudo deu certo. Se, no entanto, você estiver encerrando devido a um erro, deverá System.exit(1);ou com outro número diferente de zero correspondente ao erro específico.

Além disso, como outros já mencionaram, limpe primeiro! Isso envolve o fechamento de arquivos e outros recursos abertos.

Chris Cooper
fonte
Eu pensei que era System.exit (1)?
AFK
14
Como afirma Chris, System.exit(1)(ou qualquer outro número) é se você deseja indicar que ele foi fechado devido a um erro. System.exit(0)indica que o programa foi fechado normalmente. Você também pode alterar 1 para qualquer número que desejar e, ao executar seu aplicativo a partir de um script, é possível determinar se houve um erro.
StormPooper 24/11/11
10

System.exit(int i)deve ser usado, mas eu o incluiria dentro de um shutdown()método mais genérico , no qual você também incluiria etapas de "limpeza", fechando conexões de soquete, descritores de arquivo e saindo com System.exit(x).

Bastien
fonte
6

System.exit() geralmente não é o melhor caminho, mas depende da sua aplicação.

A maneira usual de finalizar um aplicativo é sair do main()método. Isso não funciona quando há outros threads que não são daemon em execução, como é usual para aplicativos com uma interface gráfica do usuário (AWT, Swing etc.). Para esses aplicativos, você encontra uma maneira de terminar o loop de eventos da GUI (não sabe se isso é possível com o AWT ou o Swing) ou invoca System.exit().

Christian Semrau
fonte
4

O uso dispose();é uma maneira muito eficaz de fechar seus programas.

Descobri que o uso System.exit(x)redefine o painel de interações e, supondo que você precise de algumas informações, tudo desaparece.

Joshua
fonte
3

Concordo com Jon, faça com que seu aplicativo reaja a algo e chame System.exit ().

Tenha certeza disso:

  • você usa o valor de saída apropriado. 0 é a saída normal, qualquer outra coisa indica que houve um erro
  • você fecha todos os fluxos de entrada e saída. Arquivos, conexões de rede, etc.
  • você registra ou imprime um motivo para sair, principalmente se for devido a um erro
Freiheit
fonte
2

A resposta é System.exit (), mas não é uma boa coisa a fazer, pois isso interrompe o programa. Qualquer limpeza, destruição que você pretende fazer não acontecerá.

Vaishak Suresh
fonte
1

Há duas respostas simples para a pergunta.

Esta é a "maneira profissional":

//This just terminates the program.
System.exit(0);

Esta é uma maneira mais desajeitada:

//This just terminates the program, just like System.exit(0).
return;
Anton
fonte
System.exit(0); return;também é bom, o retorno impede que qualquer código rotineiro seja executado antes que o sistema possa sair, caso contrário você precisaria de um sinalizador (..i.e. if (!called_exit) { further code after exit statement }
ycomp 15/04/16
-1
Runtime.getCurrentRumtime().halt(0);
Cara Bro
fonte
1
Melhor: Runtime.getRuntime (). Halt (0); Funcionou perfeitamente para mim no Scala!
Gerhard Hagerer
@GerhardHagerer mas e se você receber o runti não atual, eu?
Cara Bro
1
Do Javadoc para halt: "Este método deve ser usado com extrema cautela. Ao contrário do exitmétodo, este método não faz com que ganchos de desligamento sejam iniciados e não executa finalizadores não solicitados se a finalização na saída estiver ativada. Se a sequência de desligamento tiver sido ativada. já iniciado, esse método não espera que nenhum gancho ou finalizador de encerramento em execução termine seu trabalho ". Em suma, você não deve usar halt, você deve preferir exit.
Erwin Bolwidt
-1

System.exit()fará o que você quiser. Mas na maioria das situações, você provavelmente deseja sair de um encadeamento e deixar o encadeamento principal ativo. Ao fazer isso, você pode encerrar uma tarefa, mas também manter a capacidade de iniciar outra tarefa sem reiniciar o aplicativo.

SmartFingers
fonte
-3

System.exit (ABORT); Sair é o processo imediatamente.

pooploser0110
fonte
Não existe uma variável como ABORT.
Alfonso Vergara
-3

Isso deve ser feito da maneira correta:

mainFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
mainFrame.addWindowListener(new WindowListener() {

@Override
public void windowClosing(WindowEvent e) {
    if (doQuestion("Really want to exit?")) {
      mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      mainFrame.dispose();
    }
}
user3596517
fonte