to tentando setar uma mensagem para o usuário no momento que ele dispara um evento no botão. Estou atribuindo uma mensagem em um JLabel e a mesma não atualiza no momento que dou o setText().
private void btnOkMouseClicked(MouseEvent evt)
{
//System.out.println("btnOk.mouseClicked, event="+evt);
//TODO add your code for btnOk.mouseClicked
try
{
if(!jtfPath.getText().isEmpty())
{
jlbMensagem.setText("Executando a exportação. Aguarde...");
btnProcurar.enableInputMethods(false);
ArquivoExel arquivo = new ArquivoExel();
arquivo.lerXls(jtfPath.getText());
btnProcurar.enableInputMethods(true);
this.jlbMensagem.setText("Exportação concluída. Consulte o Log.");
} else
{
jlbMensagem.setText("Informe o Backlog.");
jlbMensagem.setForeground(new Color(255, 0, 0));
}
}
catch(Exception ex)
{
jlbMensagem.setText("Erro na exportação. Erro consulte o Log.");
jlbMensagem.setForeground(new Color(255,0,0));
}
}
Alguém tem idéia sobre o que está acontecendo com esse objeto JLabel ?
A atualização do setText não é instantanea. Quando você dá um setText, ele enfilera um comando na thread do swing, pedindo para o texto do JLabel se atualizar. Entretanto, sua thread está ocupada pelo processamento do botão. Assim, só quando esse processamento terminar, que o Swing irá para a próxima ação da fila, que é a de atualizar o label.
Para resolver esse problema, você precisará rodar todo o código do botão em outra thread.
private void btnOkMouseClicked(MouseEvent evt) {
if(jtfPath.getText().isEmpty()) {
jlbMensagem.setText("Informe o Backlog.");
jlbMensagem.setForeground(new Color(255, 0, 0));
return;
}
new Thread(new Runnable() {
public void run() {
try {
jlbMensagem.setText("Executando a exportação. Aguarde...");
btnProcurar.enableInputMethods(false);
ArquivoExel arquivo = new ArquivoExel();
arquivo.lerXls(jtfPath.getText());
btnProcurar.enableInputMethods(true);
this.jlbMensagem.setText("Exportação concluída. Consulte o Log.");
} catch(Exception ex) {
jlbMensagem.setText("Erro na exportação. Erro consulte o Log.");
jlbMensagem.setForeground(new Color(255,0,0));
}
}
}).start();
}
[quote=ViniGodoy]A atualização do setText não é instantanea. Quando você dá um setText, ele enfilera um comando na thread do swing, pedindo para o texto do JLabel se atualizar. Entretanto, sua thread está ocupada pelo processamento do botão. Assim, só quando esse processamento terminar, que o Swing irá para a próxima ação da fila, que é a de atualizar o label.
Para resolver esse problema, você precisará rodar todo o código do botão em outra thread.