Java.lang.IllegalArgumentException: defaultCloseOperation must be one of: DO_NOTHING_ON_CLOSE, HIDE_

Olá pessoal.

Me deparei com o seguinte erro

java.lang.IllegalArgumentException: defaultCloseOperation must be one of: DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE, or DISPOSE_ON_CLOSE
at javax.swing.JDialog.setDefaultCloseOperation(Unknown Source)

na linha de codigo que eu seto o DefaultCloseOperation eu passo o valor “3” que na JDialog corresponde a EXIT_ON_CLOSE, aqui este erro não ocorre porém ocorre no cliente.

Desconfio que seja a versão do Java instalado e que nesta versão a constante EXIT_ON_CLOSE tenha outro valor.

Alguém saberia se é isto mesmo.

Grato a todos.

Para evitar problemas como esse use a constante, nunca o valor literal.

Isso também torna o seu código mais legível.

Cara acredite…

No Java 1.6 esse EXIT_ON_CLOSE não funciona! Eu estava desenvolvendo uma aplicação com Java 1.5, mandei para outra pessoa testar e ela me reportou que não abria nenhuma tela… Porém na minha funcionava.

Tomem cuidado. Utilizei DISPOSE_ON_CLOSE no lugar

O problema de usar DISPOSE_ON_CLOSE quando se quer matar a aplicação é que apesar da janela ser fechada a JVM continua rodando. Cara, com a versão da JVM 1.6 que estou usando, o EXIT_ON_CLOSE funciona sem problemas. Porém, caso aí não funcione de jeito nenhum, você pode tentar uma abordagem “alternativa”, como por exemplo fechar a janela na “marra” reescrevendo o código que trata o evento quando o usuário tenta fechar a janela:

...
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent we) {
        //De repente aqui você pode colocar até um diálogo de confirmação perguntando 
        //se o usuário deseja ou não fechar a janela.
        System.exit(0);
    }
});
...

O mais estranho é que a minha versão do java que estou testando é a 1.4.2 igual a do cliente.

tenta coloca o exit_on_close igual o vinigodoy falo, caso não de certo vc pode fazer diferente…

coloque o hide_on_close, pegue o evento da janela sendo fechada, e quando isso acontecer da um system.exit(0)…

não é bem o usual mais ao menos vai força o fechamento igual o exit_on_close, ja q vc não tem ele ai…

o evento q vc vai trata é o WindowListener