Olá!
Eu encontrei um problema com a EDT no Linux (Ubuntu - Gnome).
Dêem uma olhada por favor:
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class JFrameTest extends JFrame {
private JPanel jContentPane = null;
private JTextField jTextField = null;
private JTextField jTextField1 = null;
public JFrameTest() {
super();
this.setSize(300, 200);
this.setTitle("JFrame");
this.setLocationRelativeTo(null);
jTextField = new JTextField();
jTextField.setBounds(new java.awt.Rectangle(35,10,171,16));
jTextField.addFocusListener(new FocusAdapter(){
public void focusLost(FocusEvent e) {
JOptionPane.showMessageDialog(JFrameTest.this,"Test Message1","",JOptionPane.ERROR_MESSAGE,null);
try {Thread.sleep(500);} catch (InterruptedException e1) {e1.printStackTrace();}
JOptionPane.showMessageDialog(JFrameTest.this,"Test Message2","",JOptionPane.ERROR_MESSAGE,null);
}
});
jTextField1 = new JTextField();
jTextField1.setBounds(new java.awt.Rectangle(35,30,171,16));
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(jTextField, null);
jContentPane.add(jTextField1, null);
this.setContentPane(jContentPane);
}
public static void main(String[] args) {
JFrameTest frame = new JFrameTest();
frame.setVisible(true);
}
}
Se vocês rodarem este trecho de código no linux (rodei no Ubuntu - Gnome) vocês verão um JFrame e 2 JTextFields. O primeiro JTextField com o foco.
Se você apertar a tecla TAB, o JTextField com foco perde o foco e a mensagem “Test Message1” aparece na tela.
Aí, se você apertar Ok nesta mensagem e apertar o TAB antes da segunda mensagem aparecer na tela, a mensagem “Test Message2” aparece na tela e logo depois, uma outra mensagem “Test Message1” aparece em cima de novo… Sendo esta última a proprietária do foco.
Então, o que eu entendi disso tudo é que a EDT está executando 2 listeners no mesmo componente ao mesmo tempo!!!
No windows eu rodei este mesmo código e isto não acontece... aparece apenas uma vez a primeira mensagem e depois apenas uma vez a segunda...
Vocês tem alguma idéia do que está acontecendo???
Como eu poderia evitar que isso acontecesse?
Obrigado a todos!