Моя проблема в том, что я хочу добавить один и тот же ActionListener к 2 различным компонентам в моей программе с графическим интерфейсом.Один, когда пользователь нажимает Enter Введите JTextField, и второй, когда пользователь нажимает на JButton.Я использую IDE Netbeans.
Поэтому я создал Thread, t1, и в методе actionPerformed actionListener я просто поместил t1.start () .Затем я добавил объект actionListener в мой JTextField и мой JButton.Когда я запускаю программу, в первый раз, когда я либо нажимаю кнопку, либо нажимаю Enter , программа работает без сбоев.Но во второй раз, когда я нажимаю кнопку или нажимаю Enter , программа выдает IllegalStateException .Вот мой код:
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
//Do something
}
});
public final ActionListener listener;
public myClass () { //Constructor
this.listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
t1.start();
}
};
InitComponents();
JButton.addActionListener(listener); //Adding listener object to JButton.
JTextField.addActionListener(listener); //Adding listener object to JTextField.
}
Я думаю, что поток не "умер" с первого раза, когда я нажал или нажал Введите , хотя run () метод уже завершен.Я тестировал программу в разных точках, чтобы убедиться, что метод run () завершился.
Я могу заставить программу работать, если создаю поток в обоих JButtonActionPerformed( и JTextFieldActionPerformed () и запускайте их внутри самих этих методов. Но это избыточно, поскольку я пишу одни и те же действия, которые будут выполняться двумя разными методами.
Любая помощьо том, почему было сгенерировано исключение IllegalStateException, и о том, как создать единый ActionListener для обоих JComponents, использующих поток. Спасибо!