Pessoal,
Em um jFrame eu tenho um botão que dispara um método que demora algum tempo para terminar de executar, porém esse método atualiza uma variável que serviria para que o usuário acompanhar a sua execução.
O "POG" abaixo serve apenas para ilustrar o problema que estou tendo.
package SwingTest;
public class FrmTeste extends javax.swing.JFrame {
public FrmTeste() {
initComponents();
}
public static void metodoDemorado(){
int i = 0;
while(true){
i++;
FrmTeste.jLabel1.setText(String.valueOf(i));
}
}
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setText("jLabel1");
jButton1.setText("jButton1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(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()
.addGap(167, 167, 167)
.addComponent(jLabel1))
.addGroup(layout.createSequentialGroup()
.addGap(144, 144, 144)
.addComponent(jButton1)))
.addContainerGap(168, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(136, 136, 136)
.addComponent(jLabel1)
.addGap(50, 50, 50)
.addComponent(jButton1)
.addContainerGap(74, Short.MAX_VALUE))
);
pack();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
metodoDemorado();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new FrmTeste().setVisible(true);
}
});
}
private javax.swing.JButton jButton1;
private static javax.swing.JLabel jLabel1;
}
Na linha:
FrmTeste.jLabel1.setText(String.valueOf(i));
do método “metodoDemorado()”, o que eu gostaria de fazer era atualizar o label do jFrame com o valor da variável “i” toda vez que o seu conteúdo fosse alterado. Entretanto o texto do jLabel só será atualizado quando terminar a execução do método, ou seja, nunca, pois eu coloquei nesse método intencionalmente um loop infinito para simular uma situação de demora.
Alguém aí saberia me dizer como eu faço para atualizar um jFrame durante a execução de um método segundo o exemplo acima?
Obrigado,