Problemas com sistema de logar

O Caso é o seguinte eu tenho um sistema de login que funciona da seguinte maneira.
O usuário preenche os dados na classe FormLogin e clica no botão logar, o Action Event do botão é chamado e a classe Logar é executada.
Na classe logar são executados os seguintes passos:
1-Abertura do arquivo contendo as informações de conexão com o Banco de Dados Mysql.
2-Leitura e salvamento deste conteúdo em uma array de string.
3-Descriptografia desta array utilizando uma classe de criptografia.
4-Conexão ao Banco de Dados Mysql utilizando os dados da array e uma classe de Banco de Dados.
5-Realizar a busca neste Banco de Dados se o usuario e senha digitados batem com o que estão no banco de dados.
6-Se estiver correto, usuário é mandado para outro JPanel sendo a janela principal do software, caso contrario aparece uma mensagem de erro, informando que o login e senha estão incorretos.
O que estão acontecendo é que se eu realizar a mensagem de erro uma vez, a segunda vez que eu clicar no botão Logar, o java da um erro da classe de criptografia que ela já foi inicializada, então eu preciso que de algum modo a chamada ao Action Event do botão logar gere uma nova chamada a classe Logar, e ao terminar de utilizar a mesma, fechar todos os recursos dela.

Os codigos das devidas classes estão abaixo.

//Classe FormLogin

[code]package Login;

//Bibliotecas
import javax.swing.JPanel;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JButton;
import javax.swing.ImageIcon;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.IOException;

@SuppressWarnings(“serial”)
public class FormLogin extends JPanel {
private JTextField tfNome;
private JPasswordField tfSenha;
private JFrame base;

//Construtor
public FormLogin(JFrame frame) {
	//Definição do JFrame
	base = frame;
	
	//Tamanhos pré-definidos
	setSize(new Dimension(800, 600));
	setPreferredSize(new Dimension(800, 600));
	setMinimumSize(new Dimension(800, 600));
	setMaximumSize(new Dimension(800, 600));
	setLayout(null); //Layout absoluto
	
	JLabel lblNome = new JLabel("Insira o nome do usu\u00E1rio:"); //JLabel e texto.
	lblNome.setBounds(310, 335, 173, 14); //Posição e tamanho do JLabel.
	add(lblNome); //Inserindo ele no JPanel.
	
	tfNome = new JTextField(); //Campo para inserir o nome.
	tfNome.setBounds(310, 361, 173, 20); //Definindo a posição e tamanho do campo.		
	add(tfNome); //Adicionando campo ao JPanel.
	
	tfNome.setColumns(10); //Definindo quantidade de colunas.
	
	JLabel lblSenha = new JLabel("Insira a senha do usu\u00E1rio:"); //JLabel e texto.
	lblSenha.setBounds(310, 392, 173, 14); //Posição e tamanho do JLabel.
	add(lblSenha); //Inserindo ele no JPanel.
	
	tfSenha = new JPasswordField(); //Campo para inserir a senha
	tfSenha.setBounds(310, 417, 173, 20); //Definindo posição e tamanho do campo.
	add(tfSenha); //Adicionando campo ao JPanel.
	
	JButton btnLogar = new JButton("Logar"); //Criando botão de ação e texto.
	btnLogar.setBounds(344, 453, 89, 23); //Definindo local e tamanho dele.
	add(btnLogar); //Adicionando ele ao JPanel.
	
	//Ação do Botão Logar
	btnLogar.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			try {
				Logar(e);
			} catch (IOException e1) {
				e1.getMessage();
			}
		}
	});
	
	JLabel label = new JLabel(""); //Adicionar um JLabel
	label.setIcon(new ImageIcon("Login.png")); //Definir um icone a ele.
	label.setBounds(269, 78, 261, 246); //Posição e tamanho dele.
	add(label); //Adicionar ao JPanel.
}

//Ação do botão.
public void Logar(ActionEvent e) throws IOException {
	@SuppressWarnings("unused")
	Logar logar = new Logar(tfNome.getText(), tfSenha.getPassword(), base);
}

}
[/code]

//Classe Login

[code]package Login;

//Bibliotecas
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import Principal.Arquivos;
import Principal.BancoDados;
import Principal.Criptografia;

public class Logar {
//Construtor
public Logar(String nome, char[] senha, JFrame frame) throws IOException {
//Abrir arquivo.
File arquivo = Arquivos.abrirArquivo(“Dados.cad”);

	//Ler Arquivo.
	String[] texto = Arquivos.lerArquivo(arquivo);
	
	//Descriptografar.
	Criptografia crip = new Criptografia();
	crip.setarSenha("One234");
	int quantidade = texto.length;
	int atual = 0;
	while (atual < quantidade) {
		texto[atual] = texto[atual].replaceFirst("null", "");
		texto[atual] = crip.descriptografar(texto[atual]);
		atual = atual + 1;
	}
	
	//Logar no BD.
	Connection con = BancoDados.conectarBD(texto[0], texto[1], texto[2], texto[3]);
	String query = "SELECT * FROM users WHERE nome = '" + nome + "' AND senha = '" + String.valueOf(senha) + "'";
	ResultSet rs = BancoDados.buscaSQL(query, con);
	
	//Verificar retorno.
	int num = 0;
	try {
		while (rs.next()) {
			num = num + 1;
		}
	} catch (SQLException e) {
		e.getMessage();
	}
	
	//Verificar se login é valido ou não.
	if (num > 0) {
		JOptionPane.showMessageDialog(null, "Login efetuado com sucesso.", "Software", JOptionPane.INFORMATION_MESSAGE);
		frame.setVisible(false);
	} else {
		JOptionPane.showMessageDialog(null, "Falha no login, dados errados.", "Software", JOptionPane.ERROR_MESSAGE);
	}
	
	//Fechar conexão
	BancoDados.fechar(rs, con);
}

}
[/code]

//E para ajudar vocês a classe de criptografia onde esta ocorrendo a mensagem de erro.

[code]package Principal;

//Bibliotecas
import org.jasypt.util.text.BasicTextEncryptor;

public class Criptografia {
//Criando a criptografia.
static BasicTextEncryptor bte = new BasicTextEncryptor();

//Setar password
public void setarSenha(String senha) {
	bte.setPassword(senha);
}

//Criptografar
public String criptografar(String texto) {
	//Encriptando a string.
	texto = bte.encrypt(texto);
	
	//retorno
	return texto;
}

//Descriptografar
public String descriptografar(String texto) {
	//Decriptando a string.
	texto = bte.decrypt(texto);
		
	//retorno
	return texto;
}

}[/code]

//E o erro que ocorre.
Exception in thread “AWT-EventQueue-0” org.jasypt.exceptions.AlreadyInitializedException: Encryption entity already initialized
at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.setPassword(StandardPBEByteEncryptor.java:290)
at org.jasypt.encryption.pbe.StandardPBEStringEncryptor.setPassword(StandardPBEStringEncryptor.java:298)
at org.jasypt.util.text.BasicTextEncryptor.setPassword(BasicTextEncryptor.java:79)
at Principal.Criptografia.setarSenha(Criptografia.java:12)
at Login.Logar.(Logar.java:26)
at Login.FormLogin.Logar(FormLogin.java:76)
at Login.FormLogin$1.actionPerformed(FormLogin.java:60)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Agradeço antecipadamente a atenção de vocês e aguardo retorno.

Onelink,

Talvez o problema esteja no fato do BasicTextEncryptor ser declarado como static na classe Criptografia, conforme código abaixo:

static BasicTextEncryptor bte = new BasicTextEncryptor();

Parece que o método setPassword() só pode ser chamado uma vez depois que você inicializa o objeto.
Não conheço esta biblioteca org.jasypt, mas é o que parece pelo erro que você colocou.
Desta forma o atributo bte pertence à classe Criptografia e não ao objeto. Então quando você cria um novo objeto com o código abaixo:

Criptografia crip = new Criptografia();  

Não é criado um novo atributo bte, mas é utilizado o mesmo para todos os objetos.
Sugiro experimentar tirar o static do BasicTextEncryptor, ou então pesquisar na biblioteca org.jasypt se a classe BasicTextEncryptor tem métodos para inicializar e finalizar os objetos, e caso possua, utilizá-los.

Obrigado al.barbosa eu já tinha notado isto antes e tirei e esta tudo normal agora.
eu já tinha modificado esta classe de static para normal por causa deste problema mesmo mais havia esquecido de retirar o static da chamada da criptografia.