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
Seria o método dispose. Não entendi porque não funcionou. Como você fez para chamar o método?
entaum eu coloquei o nome da classe.dispose();
ficou assim:
splash.dispose();
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.
a classe esta declarada desta maneira.
public class splash extends JWindow {
}
entaum eu devo usar o método dispose na imagem que eu abri?
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
[code]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();
}
}
[/code]
Isso é o que estou usando para fazer o splash
AA obrigado pela dica para padrão de criação de nome de classes.
Onde está:
System.exit(0);
Deveria estar:
dispose();
O dispose deve ser chamado diretamente, sem o nome da classe na frente.