Como descarregar class completamente?

Oi, seguinte, qdo eu fecho uma tela, e a abro novamente, ela volta da forma como estava qdo eu a fechei … ou seja tha mais p um hide do que um dispose …

Como eu realmente fecho uma tela, ou seja, descarrego uma classe ??

Você tah usando swing?
Se sim e tem um JFrame com um form sugiro que vc ao clicar em [x] faça o HIDE e somente limpe os campos para os valores que deseja. Se você fizer o DISPOSE vai perder em performance ao abrir novamente a janela…

Tou usando Swing sim.
Mas se eu usar o Hide, num vai ficando pesado, a medida q eu vou abrindo e fechando janelas? Num temo como fechar completamente?

entao… quando vc vai usar uma janela novamente o indicado é que use o HIDE, mas se nao for usar faça o dispose, mas é claro deve haver um bom senso, vc nao vai deixar 100 janelas em HIDE tbm…
verifique o metodo setDefaultCloseOperation() no javadoc do JFrame

Então Marcos, eu estou usando o dispose e o defaultCloseOperation ta Dispose().

É um sistema normal, eu não quero manter uma janela na memoria, quero finalizar ela.

Por exemplo, Tenho uma tela principal do sistema, q chama a tela de cadastro de usuarios.
Qdo eu fecho a tela de usuarios e preciso abrir novamente, ela volta como estava qdo eu fechei, ou seja, não foi finalizada, apenas foi tipo um hide, entendeu?

Eu quero finalizar a tela usuario completamente…

posta o trexo do codigo ai…

Bom eu exibo a tela com um setVisible(true) …

Aki o codigo de uma tela p exemplo:

/*

  • jFrmModelo.java
  • Created on 3 de Janeiro de 2007, 20:12
    */

package br.com.fastcommand.browsers;

import java.awt.;
import java.awt.event.
;
import javax.swing.*;
import br.com.fastcommand.auxiliares.WindowUtilities ;
import br.com.fastcommand.sistema.telaPrincipal ;
import javax.swing.table.DefaultTableModel;

/**
*

  • @author odair
    */
    public class jFrmBrowseEmpresas extends JDialog {

    // - Declaracao da classe como static
    public static jFrmBrowseEmpresas browseEmpresa = new jFrmBrowseEmpresas(
    telaPrincipal.telaPrincipal) ;

    private String vValor;

// javax.swing.jTable.DefaultTableModel dtm = (javax.swing.jTable.DefaultTableModel)jTable.getModel();

/** Creates new form jFrmModelo */
public jFrmBrowseEmpresas( JFrame pai ) {
    super(pai) ;
    WindowUtilities.setNativeLookAndFeel();
    initComponents();
    Dimension video = Toolkit.getDefaultToolkit().getScreenSize() ;
    Dimension form = getSize() ;
    setLocation((video.width-form.width)/2,(video.height-form.height)/2);
    setModal(true) ;        
}

/** This method is called from within the constructor to
 * initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is
 * always regenerated by the Form Editor.
 */
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
private void initComponents() {
    jLblTitulo = new javax.swing.JLabel();
    jPnlContainer = new javax.swing.JPanel();
    jSPane = new javax.swing.JScrollPane();
    jTblDados = new javax.swing.JTable();
    jLblAjuda = new javax.swing.JLabel();
    jBtncancela = new javax.swing.JButton();
    jBtnConfirma = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
    setFont(new java.awt.Font("Courier New", 1, 10));
    jLblTitulo.setBackground(new java.awt.Color(0, 51, 255));
    jLblTitulo.setFont(new java.awt.Font("Courier New", 1, 12));
    jLblTitulo.setForeground(new java.awt.Color(255, 255, 255));
    jLblTitulo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
    jLblTitulo.setText("BROWSER DE EMPRESAS");
    jLblTitulo.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255, 204, 204)));
    jLblTitulo.setOpaque(true);

    jPnlContainer.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
    jTblDados.setFont(new java.awt.Font("Courier New", 1, 12));
    jTblDados.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {null, null, null, null},
            {null, null, null, null},
            {null, null, null, null},
            {null, null, null, null}
        },
        new String [] {
            "CODIGO", "RAZAO", "PESSOA", "CNPJ"
        }
    ) {
        boolean[] canEdit = new boolean [] {
            false, false, false, false
        };

        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return canEdit [columnIndex];
        }
    });
    jSPane.setViewportView(jTblDados);

    javax.swing.GroupLayout jPnlContainerLayout = new javax.swing.GroupLayout(jPnlContainer);
    jPnlContainer.setLayout(jPnlContainerLayout);
    jPnlContainerLayout.setHorizontalGroup(
        jPnlContainerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jSPane, javax.swing.GroupLayout.DEFAULT_SIZE, 508, Short.MAX_VALUE)
    );
    jPnlContainerLayout.setVerticalGroup(
        jPnlContainerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jSPane, javax.swing.GroupLayout.DEFAULT_SIZE, 199, Short.MAX_VALUE)
    );

    jLblAjuda.setBackground(new java.awt.Color(51, 0, 255));
    jLblAjuda.setFont(new java.awt.Font("Courier New", 1, 12));
    jLblAjuda.setForeground(new java.awt.Color(255, 255, 255));
    jLblAjuda.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
    jLblAjuda.setText("SIBEX SISTEMAS");
    jLblAjuda.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255, 204, 204)));
    jLblAjuda.setOpaque(true);

    jBtncancela.setFont(new java.awt.Font("Courier New", 1, 11));
    jBtncancela.setForeground(new java.awt.Color(204, 0, 51));
    jBtncancela.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/fastcommand/imagens/Cancelar.GIF")));
    jBtncancela.setText("CANCELA");

    jBtnConfirma.setFont(new java.awt.Font("Courier New", 1, 11));
    jBtnConfirma.setForeground(new java.awt.Color(204, 0, 51));
    jBtnConfirma.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/fastcommand/imagens/Confirma.gif")));
    jBtnConfirma.setText("CONFIRMA");
    jBtnConfirma.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            jBtnConfirmaMouseClicked(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLblTitulo, javax.swing.GroupLayout.DEFAULT_SIZE, 512, Short.MAX_VALUE)
                        .addComponent(jPnlContainer, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addGroup(layout.createSequentialGroup()
                    .addGap(292, 292, 292)
                    .addComponent(jBtncancela, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(jBtnConfirma))
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jLblAjuda, javax.swing.GroupLayout.DEFAULT_SIZE, 512, Short.MAX_VALUE)))
            .addContainerGap())
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jLblTitulo, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(jPnlContainer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jBtnConfirma, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(jBtncancela, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(jLblAjuda, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );
    pack();
}// </editor-fold>                        

private void jBtnConfirmaMouseClicked(java.awt.event.MouseEvent evt) {                                          

// TODO add your handling code here:
//JOptionPane.showMessageDialog(null,(String)jTblDados.getValueAt(jTblDados.getSelectedRows() , jTblDados.getSelectedColumn()),“Erro no Banco de dados”,2);
int linha = jTblDados.getSelectedRow();
int coluna = 0; // x é o número da coluna dentro de sua tabela, da qual
//você quer resgatar o valor

    vValor = (String)jTblDados.getModel().getValueAt(linha, coluna);        
    JOptionPane.showMessageDialog(null,vValor,"Erro no Banco de dados",2);
}                                         

// Variables declaration - do not modify                     
private javax.swing.JButton jBtnConfirma;
private javax.swing.JButton jBtncancela;
private javax.swing.JLabel jLblAjuda;
private javax.swing.JLabel jLblTitulo;
private javax.swing.JPanel jPnlContainer;
public javax.swing.JScrollPane jSPane;
public javax.swing.JTable jTblDados;
// End of variables declaration                   

}

Editando o post para codigo…

[code]/*

  • jFrmModelo.java
  • Created on 3 de Janeiro de 2007, 20:12
    */

package br.com.fastcommand.browsers;

import java.awt.;
import java.awt.event.
;
import javax.swing.*;
import br.com.fastcommand.auxiliares.WindowUtilities ;
import br.com.fastcommand.sistema.telaPrincipal ;
import javax.swing.table.DefaultTableModel;

/**
*

  • @author odair
    */
    public class jFrmBrowseEmpresas extends JDialog {

    // - Declaracao da classe como static
    public static jFrmBrowseEmpresas browseEmpresa = new jFrmBrowseEmpresas(
    telaPrincipal.telaPrincipal) ;

    private String vValor;

// javax.swing.jTable.DefaultTableModel dtm = (javax.swing.jTable.DefaultTableModel)jTable.getModel();

/** Creates new form jFrmModelo */
public jFrmBrowseEmpresas( JFrame pai ) {
    super(pai) ;
    WindowUtilities.setNativeLookAndFeel();
    initComponents();
    Dimension video = Toolkit.getDefaultToolkit().getScreenSize() ;
    Dimension form = getSize() ;
    setLocation((video.width-form.width)/2,(video.height-form.height)/2);
    setModal(true) ;        
}

/** This method is called from within the constructor to
 * initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is
 * always regenerated by the Form Editor.
 */
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
private void initComponents() {
    jLblTitulo = new javax.swing.JLabel();
    jPnlContainer = new javax.swing.JPanel();
    jSPane = new javax.swing.JScrollPane();
    jTblDados = new javax.swing.JTable();
    jLblAjuda = new javax.swing.JLabel();
    jBtncancela = new javax.swing.JButton();
    jBtnConfirma = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
    setFont(new java.awt.Font("Courier New", 1, 10));
    jLblTitulo.setBackground(new java.awt.Color(0, 51, 255));
    jLblTitulo.setFont(new java.awt.Font("Courier New", 1, 12));
    jLblTitulo.setForeground(new java.awt.Color(255, 255, 255));
    jLblTitulo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
    jLblTitulo.setText("BROWSER DE EMPRESAS");
    jLblTitulo.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255, 204, 204)));
    jLblTitulo.setOpaque(true);

    jPnlContainer.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
    jTblDados.setFont(new java.awt.Font("Courier New", 1, 12));
    jTblDados.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {null, null, null, null},
            {null, null, null, null},
            {null, null, null, null},
            {null, null, null, null}
        },
        new String [] {
            "CODIGO", "RAZAO", "PESSOA", "CNPJ"
        }
    ) {
        boolean[] canEdit = new boolean [] {
            false, false, false, false
        };

        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return canEdit [columnIndex];
        }
    });
    jSPane.setViewportView(jTblDados);

    javax.swing.GroupLayout jPnlContainerLayout = new javax.swing.GroupLayout(jPnlContainer);
    jPnlContainer.setLayout(jPnlContainerLayout);
    jPnlContainerLayout.setHorizontalGroup(
        jPnlContainerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jSPane, javax.swing.GroupLayout.DEFAULT_SIZE, 508, Short.MAX_VALUE)
    );
    jPnlContainerLayout.setVerticalGroup(
        jPnlContainerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jSPane, javax.swing.GroupLayout.DEFAULT_SIZE, 199, Short.MAX_VALUE)
    );

    jLblAjuda.setBackground(new java.awt.Color(51, 0, 255));
    jLblAjuda.setFont(new java.awt.Font("Courier New", 1, 12));
    jLblAjuda.setForeground(new java.awt.Color(255, 255, 255));
    jLblAjuda.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
    jLblAjuda.setText("SIBEX SISTEMAS");
    jLblAjuda.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255, 204, 204)));
    jLblAjuda.setOpaque(true);

    jBtncancela.setFont(new java.awt.Font("Courier New", 1, 11));
    jBtncancela.setForeground(new java.awt.Color(204, 0, 51));
    jBtncancela.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/fastcommand/imagens/Cancelar.GIF")));
    jBtncancela.setText("CANCELA");

    jBtnConfirma.setFont(new java.awt.Font("Courier New", 1, 11));
    jBtnConfirma.setForeground(new java.awt.Color(204, 0, 51));
    jBtnConfirma.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/fastcommand/imagens/Confirma.gif")));
    jBtnConfirma.setText("CONFIRMA");
    jBtnConfirma.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            jBtnConfirmaMouseClicked(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLblTitulo, javax.swing.GroupLayout.DEFAULT_SIZE, 512, Short.MAX_VALUE)
                        .addComponent(jPnlContainer, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addGroup(layout.createSequentialGroup()
                    .addGap(292, 292, 292)
                    .addComponent(jBtncancela, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(jBtnConfirma))
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jLblAjuda, javax.swing.GroupLayout.DEFAULT_SIZE, 512, Short.MAX_VALUE)))
            .addContainerGap())
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jLblTitulo, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(jPnlContainer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jBtnConfirma, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(jBtncancela, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(jLblAjuda, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );
    pack();
}// </editor-fold>                        

private void jBtnConfirmaMouseClicked(java.awt.event.MouseEvent evt) {                                          

// TODO add your handling code here:
//JOptionPane.showMessageDialog(null,(String)jTblDados.getValueAt(jTblDados.getSelectedRows() , jTblDados.getSelectedColumn()),“Erro no Banco de dados”,2);
int linha = jTblDados.getSelectedRow();
int coluna = 0; // x é o número da coluna dentro de sua tabela, da qual
//você quer resgatar o valor

    vValor = (String)jTblDados.getModel().getValueAt(linha, coluna);        
    JOptionPane.showMessageDialog(null,vValor,"Erro no Banco de dados",2);
}                                         

// Variables declaration - do not modify                     
private javax.swing.JButton jBtnConfirma;
private javax.swing.JButton jBtncancela;
private javax.swing.JLabel jLblAjuda;
private javax.swing.JLabel jLblTitulo;
private javax.swing.JPanel jPnlContainer;
public javax.swing.JScrollPane jSPane;
public javax.swing.JTable jTblDados;
// End of variables declaration                   

}[/code]

cara, pq vc chama a classe de jFrmBrowseEmpresas e extends JDialog?

Bom o nome pq, considero uma classe como um formulario para exibição, e BrowseEmpresas, pq sera realmente um Browser de Empresas…

Qto a Dilog, pq quero uma tela q seja modal e q tenha o JFrame pai a tela principal …

Pq ? Tah tdo errado … ? …rs

Fiz um teste aqui com o JDialog q vc usou e ele não fecha com dispose, mas com o JFrame fecha.

Acredito que vc possa estar utilizando uma variavel para esse dialogo e ela nao esteja sendo marcada para o garbagecolector, tente forçar-lo

Kramba , me desculpa , mas falou grego p mim …rs,

num sei como fazer isso q vc dissee …

System.gc();

não tenho certeza se vai funcionar…

outra opção é fazer um metodo q faça o dispose pra vc, tinha um exemplo disso para jframa, acho q funciona pro jdialog tbm… vou ver se acho aqui…

O problema de dar o hide(), no lugar do dispose() é que a janela fica ocupando memória. Se é isso que você chamou de “mais pesado”, sim.

Na verdade, essé um trade-off bastante comum no swing, ou você gasta um pouco mais de memória, ou você gasta mais processamento.

Você pode dar um dispose, setar sua variável da janela para null e reconstruí-la quando for abri-la novamente (com new mesmo). - ocupa menos memória, mas exige mais processador

Ou pode limpar os campos e dar um hide e reexibi-la. - ocupando mais memória, mas aliviando o processador.

Hoje a maior parte dos micros tem abundância dos dois recursos e, a menos que a sua janela seja muito pesada, ou que possua objetos de inicialização lenta, o usuário não vai notar o tempo de criação e abertura dela.

A melhor abordagem? Se nenhuma das duas for problema, use a que deixa o código mais simples. Na minha opinião é reconstruir a janela. Evita fazer um método inteiro de limpeza.

Não custa ter também um profiler na mão, caso o usuário reclame de performance.

Código gerado por editores gráficos definitivamente são uma caca…mas deixemos esse comentário pra lá! :slight_smile:

Será que o problema todo não está no fato de você estar criando a instância da janela numa variável estática e pública?

Pelo que entendi, para exibir a janela você acessa a variável estática browseEmpresa, que é a instância da janela. Já tentou, ao invés de acessar essa variável, criar uma instância da classe?

Até porque, se o seu problema é quantidade de memória utilizada, está fazendo errado. Ao utilizar uma variável estática, assim que o programa é carregado pela máquina virtual é criada uma instância da classe. Portanto, a instância da classe já está na memória, mesmo sem estar sendo usada.

Sinto que você está com alguns problemas conceituais…