Pra fechar um JFrame, acredito que tenham duas maneiras mais usadas:
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Que define o método “Operação de Fechamento Padrão”, dizendo que a aplicação deve ser finalizada (EXIT) quando for fechada (CLOSE).
Você ainda pode passar para este método:
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE
A outra também muito usada é uma InnerClass com um WindowAdapter:
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
No evento de fechamento de tela, ele executa “System.exit(0);”, que fecha a aplicação passando retorno 0 (tudo OK).
Se você retirar esses códigos de sua aplicação ela não finalizará, se a sua intenção for esta, você pode então implementar um botão de “SAIR” e colocar o System.exit(0); no evento dele.
A parte do JOptionPane, sugiro você olhar na documentação pra se informar melhor sobre todas as opções, mas tá aí um código que funciona:
Object opcoes[] = { "OK", "Cancelar", "Ajuda" };
JOptionPane.showOptionDialog(null, "Clique OK para continuar.", "Mensagem Teste",
JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, opcoes, opcoes[0]);