Fechar um Jwindow

9 respostas
jordydavantel

Criei uma classe com extends JWidow e usei como splash, porém não consigo fecha-la.

O único comando que fecha é

System.exit(0);

Já usei os comandos

window.hide() ;
 dispose(); //Mas não funciona com JWindow 
 doDefaultCloseAction(); //Mas não funciona com JWindow

9 Respostas

Eric_Yuzo

Seria o método dispose. Não entendi porque não funcionou. Como você fez para chamar o método?

jordydavantel

entaum eu coloquei o nome da classe.dispose();

ficou assim:

splash.dispose();
Eric_Yuzo

Esse splash deve ser uma variável e não o nome da classe, certo?

Porque o mesmo objeto que foi exibido na tela, deve ser fechado com o método dispose.

jordydavantel

a classe esta declarada desta maneira.

public class splash extends JWindow {

}

entaum eu devo usar o método dispose na imagem que eu abri?

Eric_Yuzo

Agora entendi. Usar o nomeDaClasse.dispose() está dando erro porque o método dispose não é estático, portanto ele deve ser chamado a partir da referência de um objeto.

Outra coisa, por convenção, é indicado que os nomes das classes iniciem com letra maiúscula. No seu caso deveria se chamar “Splash”.

Tem como você postar a parte que você exibe este splash? E utilizando a tag code: http://www.guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor

jordydavantel
package dommer;

import java.awt.Dimension;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.Timer;
import org.netbeans.lib.awtextra.AbsoluteConstraints;
import org.netbeans.lib.awtextra.AbsoluteLayout;

public class splash extends JWindow{

    AbsoluteLayout absoluto;
    AbsoluteConstraints absimage, absbarra;
    ImageIcon image;
    JLabel jlabel;
    JProgressBar barra;


    public splash(){
        absoluto = new AbsoluteLayout();
        absimage = new AbsoluteConstraints(0,0);
        absbarra = new AbsoluteConstraints(0, 290);
        jlabel = new JLabel();
        image = new ImageIcon(this.getClass().getResource("splash.JPG"));
        barra = new JProgressBar();
        barra.setPreferredSize(new Dimension(445,15));

        jlabel.setIcon(image);
        this.getContentPane().setLayout(absoluto);
        this.getContentPane().add(jlabel, absimage);
        this.getContentPane().add(barra, absbarra);
        this.pack();
        this.setVisible(true);
        this.setLocationRelativeTo(null);


        new Thread(){

            public void run(){

                int i=0;

                while (i<101){
                    barra.setValue(i);
                    i++;
                    try {
                        sleep(30);
                    } catch (InterruptedException ex) {
                        Logger.getLogger(splash.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }                
                System.exit(0);
            }
        }.start();
    }
}

Isso é o que estou usando para fazer o splash

jordydavantel

AA obrigado pela dica para padrão de criação de nome de classes.

Eric_Yuzo

Onde está:

System.exit(0);Deveria estar:

dispose();

O dispose deve ser chamado diretamente, sem o nome da classe na frente.

jordydavantel

Muito Obrigado mesmo.

Agora esta funcionando

Criado 29 de dezembro de 2010
Ultima resposta 29 de dez. de 2010
Respostas 9
Participantes 2