JDesktopPane + JInternalFrame + Gerenciamento de memória

3 respostas
C

Pessoal, boa noite.
Este é meu primeiro tópico no fórum.

Após anos e anos programando em VB e .Net, resolvi dar um “turbo” e aprender a linguagem Java.
Estou simplesmente apaixonado pela linguagem, porém como venho do mundo Microsoft, estou apanhando em algumas coisas, por exemplo:

Estou desenvolvendo meu primeiro sistema (para desktops) em Java e estou utilizando o Eclipse.
Sei da existência do NetBeans, porém, estou preferindo utlizar o Eclipse pq eu me senti mais à vontade com ele.

No meu sistema tenho um JDesktopPane como “pai” e um JInternalFrame como “filho” que faz o cadastro de cidades no MySQL.

Eu executei o sistema com o Gerenciador de Tarefas aberto e notei algo que não gostei muito.

Quando rodo sistema o processo javaw consome +/- uns 17.000 K de memória.
Quando invoco o JInternalFrame o processo javaw aumenta para 24.000 K.

Bom, até ai tudo beleza. Porém, quando eu fecho o JInternalFrame o consumo do processo javaw continua nos 24.000 K.

O correto não seria abaixar o consumo pelo menos um pouco?

Abraços, e muito obrigado.

3 Respostas

C

Pessoal, segue abaixo o código do meu JInternalFrame.
Vc's poderiam verificar se eu estou declarando corretamente minhas váriaveis e constantes?

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

@SuppressWarnings("serial")
public class JanelaCidades extends Persistencia {
	
	private static DefaultTableModel modelo = new DefaultTableModel() {
		public boolean isCellEditable(int rowIndex, int mColIndex) {
			return false;
		}
	};
	
	private static String cidadeSelecionada = null;
	private static String UFSelecionado = null;
	
	static JInternalFrame montaJanelaCidades() {

		final JInternalFrame janelaCidades = new JInternalFrame();
		
		try {
			
			janelaCidades.setLayout(null);

			Font fontPadrao = new Font("Verdana", 4, 11);
			

			// -----------------------------------------------------------------
			// Label Cidade
			JLabel lbl_cidade = new JLabel("Cidade");
			lbl_cidade.setFont(fontPadrao);
			lbl_cidade.setLocation(10, 10);
			lbl_cidade.setSize(40, 10);
			janelaCidades.add(lbl_cidade);

			// -----------------------------------------------------------------
			// Text Cidade
			final JTextField txt_cidade = new JTextField();
			txt_cidade.setFont(fontPadrao);
			txt_cidade.setLocation(10, 26);
			txt_cidade.setSize(385, 20);
			janelaCidades.add(txt_cidade);

			// -----------------------------------------------------------------
			// Label UF
			JLabel lbl_UF = new JLabel("UF");
			lbl_UF.setFont(fontPadrao);
			lbl_UF.setLocation(400, 10);
			lbl_UF.setSize(40, 10);
			janelaCidades.add(lbl_UF);

			// -----------------------------------------------------------------
			// ComboBox UF
			final JComboBox cmb_UF = new JComboBox();
			cmb_UF.setFont(fontPadrao);
			cmb_UF.setLocation(400, 25);
			cmb_UF.setSize(60, 20);
			cmb_UF.setBackground(txt_cidade.getBackground());
			cmb_UF.addItem("AC");
			cmb_UF.addItem("AL");
			cmb_UF.addItem("AP");
			cmb_UF.addItem("AM");
			cmb_UF.addItem("BA");
			cmb_UF.addItem("CE");
			cmb_UF.addItem("DF");
			cmb_UF.addItem("GO");
			cmb_UF.addItem("MA");
			cmb_UF.addItem("MG");
			cmb_UF.addItem("MS");
			cmb_UF.addItem("MT");
			cmb_UF.addItem("PA");
			cmb_UF.addItem("PB");
			cmb_UF.addItem("PR");
			cmb_UF.addItem("PE");
			cmb_UF.addItem("PI");
			cmb_UF.addItem("RJ");
			cmb_UF.addItem("RN");
			cmb_UF.addItem("RO");
			cmb_UF.addItem("RR");
			cmb_UF.addItem("SC");
			cmb_UF.addItem("SE");
			cmb_UF.addItem("SP");
			cmb_UF.addItem("TO");
			cmb_UF.setSelectedItem("SP");
			janelaCidades.add(cmb_UF);

			// -----------------------------------------------------------------
			// JButton Inserir
			final JButton btn_Inserir = new JButton("Inserir");
			final ImageIcon imgInserir = new ImageIcon("imgs/16x16/inserir.png");
			btn_Inserir.setIcon(imgInserir);
			btn_Inserir.setFont(fontPadrao);
			btn_Inserir.setSize(100, 28);
			btn_Inserir.setLocation(10, 60);
			janelaCidades.add(btn_Inserir);

			// -----------------------------------------------------------------
			// JButton Alterar
			final JButton btn_Alterar = new JButton("Alterar");
			final ImageIcon imgAlterar = new ImageIcon("imgs/16x16/alterar.png");
			btn_Alterar.setIcon(imgAlterar);
			btn_Alterar.setFont(fontPadrao);
			btn_Alterar.setSize(110, 28);
			btn_Alterar.setLocation(115, 60);
			janelaCidades.add(btn_Alterar);

			// -----------------------------------------------------------------
			// JButton Confirmar
			final JButton btn_Confirmar = new JButton("Confirmar");
			final ImageIcon imgConfirmar = new ImageIcon(
					"imgs/16x16/confirmar.png");
			btn_Confirmar.setIcon(imgConfirmar);
			btn_Confirmar.setFont(fontPadrao);
			btn_Confirmar.setSize(115, 28);
			btn_Confirmar.setLocation(230, 60);
			btn_Confirmar.setEnabled(false);
			janelaCidades.add(btn_Confirmar);

			// -----------------------------------------------------------------
			// JButton Remover
			final JButton btn_Remover = new JButton("Remover");
			final ImageIcon imgRemover = new ImageIcon("imgs/16x16/remover.png");
			btn_Remover.setIcon(imgRemover);
			btn_Remover.setFont(fontPadrao);
			btn_Remover.setSize(110, 28);
			btn_Remover.setLocation(350, 60);
			btn_Remover.setEnabled(false);
			janelaCidades.add(btn_Remover);

			// -----------------------------------------------------------------
			// JTable
			final JTable gridAlterarRemover = new JTable(modelo);
			gridAlterarRemover.setFont(fontPadrao);

			// Monta o Grid
			if (modelo.getColumnCount() != 2) {
				modelo.addColumn("Cidade");
				modelo.addColumn("UF");
			}

			final JScrollPane scrollAlterarRemover = new JScrollPane(
					gridAlterarRemover);

			scrollAlterarRemover.setLocation(10, 140);
			scrollAlterarRemover.setSize(450, 130);
			scrollAlterarRemover.setFont(fontPadrao);

			DefaultTableCellRenderer centralizado = new DefaultTableCellRenderer();
			centralizado.setHorizontalAlignment(SwingConstants.CENTER);
			gridAlterarRemover.getColumnModel().getColumn(1).setCellRenderer(
					centralizado);

			gridAlterarRemover.setEnabled(false);

			janelaCidades.add(scrollAlterarRemover);

			// -----------------------------------------------------------------
			// Monta janela
			janelaCidades.setSize(480, 313);
			janelaCidades.setMaximizable(false);
			janelaCidades.setResizable(false);
			janelaCidades.setClosable(true);
			janelaCidades.setLocation(10, 50);
			janelaCidades.setTitle("Cidades");
			janelaCidades.setVisible(true);
			janelaCidades
					.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);

			atualizarGrid();

			// -----------------

			janelaCidades.addInternalFrameListener(new InternalFrameListener() {

				@Override
				public void internalFrameOpened(InternalFrameEvent e) {
				
				}

				@Override
				public void internalFrameIconified(InternalFrameEvent e) {
					// TODO Auto-generated method stub

				}

				@Override
				public void internalFrameDeiconified(InternalFrameEvent e) {
					// TODO Auto-generated method stub

				}

				@Override
				public void internalFrameDeactivated(InternalFrameEvent e) {
					// TODO Auto-generated method stub

				}

				@Override
				public void internalFrameClosing(InternalFrameEvent e) {
					cidadeSelecionada = null;
					UFSelecionado = null;
					
					try {
						finalize();
					} catch (Throwable e1) {
						JOptionPane.showMessageDialog(null, e1.getMessage(), "Atenção", 2);
					}
				}

				@Override
				public void internalFrameClosed(InternalFrameEvent e) {
					// TODO Auto-generated method stub

				}

				@Override
				public void internalFrameActivated(InternalFrameEvent e) {
					// TODO Auto-generated method stub

				}
			});

			// ===================================================================
			// txt_cidade LOSTFocus
			txt_cidade.addFocusListener(new FocusListener() {

				@Override
				public void focusLost(FocusEvent e) {
					txt_cidade.setText(txt_cidade.getText().toUpperCase());
					cidadeSelecionada = txt_cidade.getText();

				}

				@Override
				public void focusGained(FocusEvent e) {
					// TODO Auto-generated method stub

				}
			});

			// ===================================================================
			// Seleciona linha do Grid
			gridAlterarRemover.addMouseListener(new MouseListener() {

				@Override
				public void mouseReleased(MouseEvent e) {
					// TODO Auto-generated method stub

				}

				@Override
				public void mousePressed(MouseEvent e) {
					// TODO Auto-generated method stub

				}

				@Override
				public void mouseExited(MouseEvent e) {
					// TODO Auto-generated method stub

				}

				@Override
				public void mouseEntered(MouseEvent e) {
					// TODO Auto-generated method stub

				}

				@Override
				public void mouseClicked(MouseEvent e) {
					if (gridAlterarRemover.isEnabled()) {
						cidadeSelecionada = (String) gridAlterarRemover
								.getValueAt(
										gridAlterarRemover.getSelectedRow(), 0);
						txt_cidade.setText(cidadeSelecionada);

						// ----------------------

						UFSelecionado = (String) gridAlterarRemover.getValueAt(
								gridAlterarRemover.getSelectedRow(), 1);
						cmb_UF.setSelectedItem(UFSelecionado);
					}
				}

			});

			// --------------------------------------------------------------
			// botão Inserir
			btn_Inserir.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent e) {
					
					String cidade = txt_cidade.getText();

					if (cidade.isEmpty()) {
						JOptionPane.showMessageDialog(null,
								"O campo 'Cidade' não pode ser vázio.",
								"Atenção", 2, null);
						return;
					}

					try {
						JanelaCidades
								.insertSQL("insert into Cidades (cid_nome, cid_uf) VALUES ('"
										+ txt_cidade.getText()
										+ "','"
										+ cmb_UF.getSelectedItem() + "')");
					} catch (Exception e2) {
						System.out.println(e2.getMessage());
					}

					try {
						atualizarGrid();
					} catch (Exception e1) {
						System.out.println(e1.getMessage());
					}
				}
			});

			// --------------------------------------------------------------
			// botão Alterar
			
			btn_Alterar.addActionListener(new ActionListener() {
				
				final ImageIcon imgCancelar = new ImageIcon("imgs/16x16/cancelar.png");
				
				@Override
				public void actionPerformed(ActionEvent e) {
					if (btn_Alterar.getText() == "Alterar") {
						txt_cidade.setText(null);
						btn_Alterar.setText("Cancelar");
						btn_Alterar.setIcon(imgCancelar);
						btn_Inserir.setEnabled(false);
						btn_Confirmar.setEnabled(true);
						btn_Remover.setEnabled(true);
						gridAlterarRemover.setEnabled(true);
					} else if (btn_Alterar.getText() == "Cancelar" ){
						btn_Alterar.setText("Alterar");
						btn_Alterar.setIcon(imgAlterar);
						btn_Inserir.setEnabled(true);
						btn_Confirmar.setEnabled(false);
						btn_Remover.setEnabled(false);
						gridAlterarRemover.setEnabled(false);
						txt_cidade.setText(null);
						cmb_UF.setSelectedItem("SP");
						gridAlterarRemover.setEnabled(false);
					}
					
					try {
						atualizarGrid();
					} catch (Exception e1) {
						System.out.println(e1.getMessage());;
					}
				}
			});

				
			// --------------------------------------------------------------
			// botão Confirmar
			btn_Confirmar.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent e) {
					if (cidadeSelecionada.isEmpty()) {
						JOptionPane.showMessageDialog(null,
								"Não há nenhuma cidade selecionada", "Atenção",
								2);
						return;
					} else {
						try {
							JanelaCidades
									.updateSQL("update Cidades set cid_nome='"
											+ txt_cidade.getText()
											+ "', cid_uf = '"
											+ (String) cmb_UF.getSelectedItem()
											+ "' where cid_nome ='"
											+ cidadeSelecionada + "'");
						} catch (Exception e2) {
							System.out.println(e2.getMessage());
						}

						try {
							atualizarGrid();
						} catch (Exception e1) {
							System.out.println(e1.getMessage());
						}

						txt_cidade.setText(null);
						cmb_UF.setSelectedItem("SP");
						btn_Inserir.setEnabled(true);
						btn_Alterar.setText("Alterar");
						btn_Alterar.setIcon(new ImageIcon(
								"imgs/16x16/alterar.png"));
						btn_Confirmar.setEnabled(false);
						btn_Remover.setEnabled(false);
						gridAlterarRemover.setEnabled(false);
					}
				}
			});

			// --------------------------------------------------------------
			// botão Remover
			btn_Remover.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent e) {
					if (cidadeSelecionada.isEmpty()) {
						JOptionPane.showMessageDialog(null,
								"Não há nenhuma cidade selecionada", "Atenção",
								2);
						return;
					}
					int resp = JOptionPane.showConfirmDialog(null,
							"Deseja realmente remover a cidade '"
									+ cidadeSelecionada + "'?", "Atenção",
							JOptionPane.YES_NO_OPTION);
					if (resp == 0) {

						try {
							JanelaCidades
									.deleteSQL("delete from Cidades where cid_nome='"
											+ cidadeSelecionada + "'");
						} catch (Exception e2) {
							System.out.println(e2.getMessage());
						} finally {
							
						}

						try {
							atualizarGrid();
						} catch (Exception e1) {
							System.out.println(e1.getMessage());
						}

						txt_cidade.setText(null);
						cmb_UF.setSelectedItem("SP");
						btn_Inserir.setEnabled(true);
						btn_Alterar.setText("Alterar");
						btn_Alterar.setIcon(new ImageIcon(
								"imgs/16x16/alterar.png"));
						btn_Confirmar.setEnabled(false);
						btn_Remover.setEnabled(false);
						gridAlterarRemover.setEnabled(false);
					} else {
						return;
					}
				}
			});

		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, e.getMessage(), "Atenção", 2);
		}
		return janelaCidades;
	}

	// =================================================================
	// Atualiza o Grid
	public static void atualizarGrid() throws Exception {
		
		Class.forName("org.gjt.mm.mysql.Driver");

		Connection con = DriverManager
				.getConnection("jdbc:mysql://localhost/x_easy?user=root&password=1104");
		Statement stm = con.createStatement();
		
		ResultSet rs = stm
		.executeQuery("select * from cidades order by cid_nome asc");

		try {

			// Limpa o Grid
			modelo.setNumRows(0);			
			

			while (rs.next()) {
				modelo.addRow(new String[] { rs.getString("cid_nome"),
						rs.getString("cid_uf") });
			}

		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, e.getMessage(), "Atenção", 2);
		} finally {
			stm.close();
			con.close();
		}
	}
}

Obrigado!

lina

Oi,

O lance é você chamar o método doDefaultCloseAction(); para fechar a aplicação, já retirando essa quantidade de memoria ocupada.

Tchauzin!

L

Boa tarde!!

Estou com o mesmo problema citado pelo Cartoni…
Tentei usar o doDefaultCloseAction() diretamente no meu JInternalFrame, porém não adiantou.

Alguém tem alguma novidade sobre isso?

Obrigado.

Criado 31 de agosto de 2009
Ultima resposta 17 de set. de 2009
Respostas 3
Participantes 3