Toda vez que chamo um metodo para buscar os dados do meu banco ele trava na conexao

Ola,

Estou aprendendo a mostrar dados em uma jtable. Acontece que toda vezes que chamo o método para buscar os dados no meu banco ele trava nao mostra nenhum erro , e fica consumindo cada vez mais e mais memoria se eu nao finalizar a aplicação no gerenciador. Alguem me da um help ai. O metodo findAll() que esta travando esta na classe ComputadorDAO. Segue os códigos:

ComputadorDAO

package br.com.lenito.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.lenito.entity.Computador;

public class ComputadorDAO implements IComputador {

	private static final String sqlInsert = "insert into maquina"
			+ "(nome_maquina, ip_maquina, modelo_maquina, serial_number, id_marca, id_setor, usuario)"
			+ "values (?,?,?,?,?,?,?)";

	private static final String sqlUpdate = "update maquina"
			+ "set nome_maquina = ?, ip_maquina = ?, modelo_maquina = ?, serial_number = ?, id_marca = ?, id_setor = ?, usuario = ?"
			+ "where id_maquina = ?";

	private static final String sqlRemove = "delete from maquina where id_maquina = ?";

	private static final String sqlFindAll = "select * from maquina";

	@Override
	public int save(Computador computador) {
		Connection conn = Conexao.getConnection();
		PreparedStatement pstm = null;
		int result = 0;
		try {
			pstm = conn.prepareStatement(sqlInsert);
			pstm.setString(1, computador.getNome());
			pstm.setString(2, computador.getIp());
			pstm.setString(3, computador.getModelo());
			pstm.setString(4, computador.getSerialNumber());
			pstm.setInt(5, computador.getIdMarca());
			pstm.setInt(6, computador.getIdSetor());
			pstm.setString(7, computador.getUsuario());
			result = pstm.executeUpdate();

		} catch (SQLException e) {
			try {
				if (conn != null) {
					conn.rollback();
				}
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			e.printStackTrace();
		} finally {
			Conexao.close(conn, pstm, null);
		}
		return result;
	}

	@Override
	public int update(Computador computador) {
		Connection conn = Conexao.getConnection();
		PreparedStatement pstm = null;
		int result = 0;
		try {
			pstm = conn.prepareStatement(sqlUpdate);
			pstm.setString(1, computador.getNome());
			pstm.setString(2, computador.getIp());
			pstm.setString(3, computador.getModelo());
			pstm.setString(4, computador.getSerialNumber());
			pstm.setInt(5, computador.getIdMarca());
			pstm.setInt(6, computador.getIdSetor());
			pstm.setString(7, computador.getUsuario());
			pstm.setInt(8, computador.getId());
			result = pstm.executeUpdate();

		} catch (SQLException e) {
			try {
				if (conn != null) {
					conn.rollback();
				}
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			e.printStackTrace();
		} finally {
			Conexao.close(conn, pstm, null);
		}
		return result;
	}

	@Override
	public int remove(int id) {
		Connection conn = Conexao.getConnection();
		PreparedStatement pstm = null;
		int result = 0;
		try {

			pstm = conn.prepareStatement(sqlRemove);
			pstm.setInt(1, id);
			result = pstm.executeUpdate();

		} catch (SQLException e) {
			try {
				if (conn != null) {
					conn.rollback();
				}
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			e.printStackTrace();
		} finally {
			Conexao.close(conn, pstm, null);
		}
		return result;
	}

	@Override
	public List<Computador> findAll() {

		Connection conn = Conexao.getConnection();
		PreparedStatement pstm = null;
		ResultSet rs = null;
		List<Computador> computadores = new ArrayList<Computador>();
		try {
			
			pstm = conn.prepareStatement(sqlFindAll);
			rs = pstm.executeQuery();
			
			while(rs.next()){
				Computador computador = new Computador();
				computador.setId(rs.getInt("id_maquina"));
				computador.setNome(rs.getString("nome_maquina"));
				computador.setIp(rs.getString("ip_maquina"));
				computador.setIdSetor(rs.getInt("id_setor"));
				computador.setId(rs.getInt("id_maquina"));
				computador.setModelo(rs.getString("modelo_maquina"));
				computador.setUsuario(rs.getString("usuario"));
				
				computadores.add(computador);
			}

		} catch (SQLException e) {
			try {
				if (conn != null) {
					conn.rollback();
				}
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			e.printStackTrace();
		} finally {
			Conexao.close(conn, pstm, rs);
		}
		return computadores;

	}

}

Conexao

package br.com.lenito.dao;

import java.sql.*;

public class Conexao {
	
	
	    private static final String URL_MYSQL = "jdbc:mysql://localhost/inventario_intercam?useTimezone=true&serverTimezone=UTC";
	    private static final String DRIVER_CLASS_MYSQL = "com.mysql.cj.jdbc.Driver";
	    private static final String USER = "root";
	    private static final String PASS = "Lnt@478811901";

	    public static Connection getConnection() {
	        System.out.println("Conectando ao Banco de Dados");
	        try {
	            Class.forName(DRIVER_CLASS_MYSQL);
	            return DriverManager.getConnection(URL_MYSQL, USER, PASS);
	            
	        } catch (ClassNotFoundException e) {
	        	
	            e.printStackTrace();
	        } catch (SQLException e) {
	            throw new RuntimeException(e);
	        }
	        	return null;
	    }

	    public static void close(Connection conn, PreparedStatement stmt, ResultSet rs) {
	        try {
	            if (conn!= null) {
	                conn.close();
	                System.out.println("Conexão Fechado");
	            }

	            if (stmt!= null) {
	                stmt.close();
	                System.out.println("Statment Fechado");
	            }

	            if (rs!= null) {
	                rs.close();
	                System.out.println("RS Fechado");
	            }
	        } catch (SQLException e) {
	            e.printStackTrace();
	        }
	    }

	    @SuppressWarnings({ "resource" })
		public static void createTable() {
	        Connection connection = getConnection();
	        PreparedStatement stmt = null;
	        String sql = "CREATE TABLE IF NOT EXISTS setor (" +
	                "  id_setor int NOT NULL AUTO_INCREMENT," +
	                "  nome_setor VARCHAR(25) NOT NULL," +
	                "  CONSTRAINT PK_SETOR PRIMARY KEY (id_setor)" +
	                ");";
	        
	        String sql2 = "CREATE TABLE IF NOT EXISTS marca (" +
	                "  id_marca int NOT NULL AUTO_INCREMENT," +
	                "  nome_marca VARCHAR(30) NOT NULL," +
	                "  CONSTRAINT PK_MARCA PRIMARY KEY (id_marca)" +
	                ");";
	        
	        String sql3 = "CREATE TABLE IF NOT EXISTS maquina (" +
	                "  id_maquina int NOT NULL AUTO_INCREMENT," +
	                "  nome_maquina VARCHAR(15) NOT NULL," +
	                "  ip_maquina VARCHAR(15) NOT NULL," +
	                "  modelo_maquina VARCHAR(50) NOT NULL," +
	                "  serial_number VARCHAR(50) NOT NULL," +
	                "  id_marca int NOT NULL," +
	                "  id_setor int NOT NULL," +
	                "  usuario VARCHAR(20) NOT NULL," +
	                "  CONSTRAINT PK_MAQUINA PRIMARY KEY (id_maquina)," +
	                "  CONSTRAINT FK_SETOR FOREIGN KEY (id_setor) REFERENCES setor (id_setor)," +
	                "  CONSTRAINT FK_MARCA FOREIGN KEY (id_marca) REFERENCES marca (id_marca)" +
	                ");";
	        try {
	        	//Criação da tabela setor
	            stmt = connection.prepareStatement(sql);
	            stmt.execute();
	            //Criação da tabela marca
	            stmt = connection.prepareStatement(sql2);
	            stmt.execute();
	            //Criação da tabela maquina
	            stmt = connection.prepareStatement(sql3);
	            stmt.execute();
	            System.out.println("Tabelas OK!");
	        } catch (SQLException e) {
	            e.printStackTrace();
	        } finally {
	            close(connection, stmt, null);
	        }
	    }
}

A classe table model

package br.com.lenito.table;

import java.util.List;

import javax.swing.table.AbstractTableModel;

import br.com.lenito.entity.Computador;

/**
 * @author lenito.gama
 *
 */
public class ComputadorTableModel extends AbstractTableModel {

	private static final long serialVersionUID = 1L;
	private static final int col_id = 0;
	private static final int col_nome = 1;
	private static final int col_ip = 2;
	private static final int col_modelo = 3;
	private static final int col_serial = 4;
	private static final int col_marca = 5;
	private static final int col_setor = 6;
	private static final int col_usuario = 7;

	private List<Computador> valores;

	public ComputadorTableModel(List<Computador> valores) {
		this.valores = valores;
	}

	@Override
	public int getRowCount() {

		return valores.size();
	}

	@Override
	public int getColumnCount() {

		return 8;
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		Computador computador = valores.get(rowIndex);
		if (columnIndex == col_id) {

			return computador.getId();

		} else if (columnIndex == col_nome) {

			return computador.getNome();

		} else if (columnIndex == col_ip) {

			return computador.getIp();

		} else if (columnIndex == col_modelo) {

			return computador.getModelo();

		} else if (columnIndex == col_serial) {

			return computador.getSerialNumber();

		} else if (columnIndex == col_marca) {

			return computador.getIdMarca();

		} else if (columnIndex == col_setor) {

			return computador.getIdSetor();

		} else if (columnIndex == col_usuario) {

			return computador.getUsuario();

		}
		return null;
	}

	@Override
	public String getColumnName(int column) {

		String coluna = "";
		switch (column) {

		case col_id:
			coluna = "Código";
			break;
		case col_nome:
			coluna = "Nome";
			break;
		case col_ip:
			coluna = "IP";
			break;
		case col_modelo:
			coluna = "Modelo";
			break;
		case col_serial:
			coluna = "Serial Number";
			break;
		case col_setor:
			coluna = "Setor";
			break;
		case col_marca:
			coluna = "Marca";
			break;
		case col_usuario:
			coluna = "Usuário";
			break;
		default:
			throw new IllegalArgumentException("Coluna inválida!");
		}
		return coluna;
	}
	
	@Override
	public Class<?> getColumnClass(int columnIndex) {

		if(columnIndex == col_id){
			return int.class;
		} else if(columnIndex == col_nome){
			return String.class;
		} else if(columnIndex == col_ip){
			return String.class;
		} else if(columnIndex == col_modelo){
			return String.class;
		} else if(columnIndex == col_serial){
			return String.class;
		} else if(columnIndex == col_setor){
			return int.class;
		} else if(columnIndex == col_ip){
			return String.class;
		} else if(columnIndex == col_marca){
			return int.class;
		} else if(columnIndex == col_usuario){
			return String.class;
		}
		return null;
	}
	
	public Computador get(int row){
		return valores.get(row);
	}

}

E aqui o form se caso precisar, o metodo refreshtable que acaba no find all

package br.com.lenito.view;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;

import br.com.lenito.controller.ComputadorController;
import br.com.lenito.entity.Computador;
import br.com.lenito.table.ComputadorTableModel;
import net.miginfocom.swing.MigLayout;

public class ComputadorForm extends JFrame{
	
	//Criação das variáveis
	private static final long serialVersionUID = 1L;
	private JLabel lbIp, lbUsuario, lbMarca, lbSetor, lbModelo, lbSerial, lbNome;
	private JTextField txtIp, txtUsuario, txtMarca, txtSetor, txtModelo, txtSerial, txtNome;
	private JPanel panelAdd, panelTable, panelButtons;
	private JButton btnNew, btnSave, btnRemove, btnUpdate, btnCancel;
	private JTable table;
	private JScrollPane scrollPane;
	
	private List<Computador> computadorList;
	
	private int idComputador = 0;
	
	//Criação do construtor
	public ComputadorForm() {
		
		super("Cadastro de Computadores");
		setContentPane(new JPanel());
		setLayout(null);
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//Criação do painel Add
		panelAdd = new JPanel(new MigLayout());
		panelAdd.setBorder(BorderFactory.createTitledBorder("Adicionar Computador"));
		panelAdd.setBounds(5, 0, 480, 200);
		
		//Criação dos labels
		lbIp = new JLabel("IP");
		lbMarca = new JLabel("Marca");
		lbModelo = new JLabel("Modelo");
		lbNome = new JLabel("Nome");
		lbSerial = new JLabel("Serial N.");
		lbSetor = new JLabel("Setor");
		lbUsuario = new JLabel("Usuário");
		
		//Criação dos txts
		txtIp = new JTextField(14);
		txtMarca = new JTextField(30);
		txtModelo = new JTextField(30);
		txtNome = new JTextField(50);
		txtSerial = new JTextField(50);
		txtSetor = new JTextField(2);;
		txtUsuario = new JTextField(2);
		
		//Adicionando os txts e os labels no painel
		panelAdd.add(lbIp);
		panelAdd.add(txtIp,"span, growx");
		
		panelAdd.add(lbMarca);
		panelAdd.add(txtMarca,"span, growx");
		
		panelAdd.add(lbModelo);
		panelAdd.add(txtModelo,"span, growx");
		
		panelAdd.add(lbNome);
		panelAdd.add(txtNome,"span, growx");
		
		panelAdd.add(lbSerial);
		panelAdd.add(txtSerial,"span, growx");
		
		panelAdd.add(lbSetor);
		panelAdd.add(txtSetor,"span, growx");
		
		panelAdd.add(lbUsuario);
		panelAdd.add(txtUsuario,"span, growx");
		
		//Criação do painel dos botões
		panelButtons = new JPanel(new MigLayout());
		panelButtons.setBorder(BorderFactory.createEtchedBorder());
		panelButtons.setBounds(5, 205, 480, 40);
		
		//Criação dos botões
		ClassLoader loader = getClass().getClassLoader();  							//Dando acesso para carregar as imagens dos botoes
		btnNew = new JButton(new ImageIcon(loader.getResource("img/new.png")));
		btnSave = new JButton(new ImageIcon(loader.getResource("img/save.png")));
		btnCancel = new JButton(new ImageIcon(loader.getResource("img/cancel.png")));
		btnRemove = new JButton(new ImageIcon(loader.getResource("img/trash.png")));
		btnUpdate = new JButton(new ImageIcon(loader.getResource("img/edit.png")));
		
		//Incluindo os botões no painel
		panelButtons.add(btnNew, "gapleft 90");
		panelButtons.add(btnCancel);
		panelButtons.add(btnSave, "gap unrelated");
		panelButtons.add(btnUpdate, "gap unrelated");
		panelButtons.add(btnRemove);
		
		//Criação do painel da tabela
		panelTable = new JPanel(new MigLayout());
		panelTable.setBorder(BorderFactory.createTitledBorder("Lista de Computadores"));
		panelTable.setBounds(5, 250, 480, 240);
		
		//Criação da tabela
		table = new JTable();
		
		//Criação da barra de rolagem da tabela
		scrollPane = new JScrollPane(table);
		
		//Adicionando a tabela no painel de tabela
		panelTable.add(scrollPane);
		
		//Atualizar a lista
		//refreshTable();
		
		//Adicionando os paineis no form
		add(panelAdd);
		add(panelButtons);
		add(panelTable);
		
		//Setando configurações do form
		setMinimumSize(new Dimension(500, 520));
		setVisible(true);
		
		btnSave.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				onSaveComputador();
				
			}
		});
		
	}
	
	private void onSaveComputador() {
		
		Computador computador = new Computador();
		if(txtIp.getText().length() > 0 && txtModelo.getText().length() > 0 && txtNome.getText().length() > 0 && txtMarca.getText().length() > 0 && txtSerial.getText().length() > 0 && txtSetor.getText().length() > 0 && txtUsuario.getText().length() > 0){
			
			computador.setIdMarca(Integer.parseInt(txtMarca.getText()));
			computador.setIdSetor(Integer.parseInt(txtSetor.getText()));
			computador.setIp(txtIp.getText());
			computador.setModelo(txtModelo.getText());
			computador.setNome(txtNome.getText());
			computador.setUsuario(txtUsuario.getText());
			computador.setSerialNumber(txtSerial.getText());
			
		} else{
			JOptionPane.showMessageDialog(this,"Todos os campos devem serem preenchidos!");
			return;
		}
		
		int result = 0;
		
		if(idComputador == 0){
			result = new ComputadorController().addComputador(computador);
		} else{
			
			computador.setId(idComputador);
			result = new ComputadorController().alterarComputador(computador);
			idComputador = 0;
		}
		
		if(result == 1){
			
			JOptionPane.showMessageDialog(this, "Valor inserido com sucesso!");
			//refreshTable();
			
		} else{
			
			JOptionPane.showMessageDialog(this, "Tente Novamente!");
			
		}
		
	}
	
	private void refreshTable(){
		
		computadorList = new ComputadorController().findComputadores();
		
		if (computadorList != null){
			
			table.setModel(new ComputadorTableModel(computadorList));
			
		}
	}
}