У меня есть кнопка панели инструментов, которую я пытаюсь отключить, используя action.setEnabled (false), но когда я это делаю, я получаю следующую ошибку:Почему я не могу отключить кнопку панели инструментов (действие) с помощью setEnabled (false)
java.lang.IllegalStateException: This must happen in the event thread!
at org.openide.awt.Actions$Bridge.propertyChange(Actions.java:929)
at org.openide.util.WeakListenerImpl$PropertyChange.propertyChange(WeakListenerImpl.java:197)
at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)
at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327)
at javax.swing.event.SwingPropertyChangeSupport.firePropertyChange(SwingPropertyChangeSupport.java:92)
at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263)
at javax.swing.AbstractAction.firePropertyChange(AbstractAction.java:276)
at javax.swing.AbstractAction.setEnabled(AbstractAction.java:236)
это происходит после вызова этого кода:
Action a = new ActionsHelper().findAction("StopDataLogging");
a.setEnabled(false);
Но когда я делаю это внутри метода actionPerform он не показывает ошибку:
public void actionPerformed(ActionEvent e) {
// TODO implement action body
Action a = new ActionsHelper().findAction("StopDataLogging");
if (a != null){
if (a.isEnabled()){
a.setEnabled(false);
this.setEnabled(true);
}else{
a.setEnabled(true);
this.setEnabled(false);
}
}
}
Каким образом можно включить/отключить действие вне потока событий?
UPDATE:
Я даже создать свое собственное мероприятие действий, и я пытаюсь использовать setEnable в actionPerformed и не событие, как это работает, он замирает показывает ту же самую ошибку
ActionEvent actionEvent = new ActionEvent(this,
ActionEvent.ACTION_PERFORMED, "DataLoggingCompleted");
a.actionPerformed(actionEvent);
.... .....
public void actionPerformed(ActionEvent e) {
// TODO implement action body
if(e.getActionCommand().contains("DataLoggingCompleted")){
setEnabled(false);
}
}
Возможный дубликат [Получение java.lang.IllegalStateException: этот вызов должен произойти в AWT Event Dispatch Thread! См.] (Http://stackoverflow.com/questions/12464524/getting-java-lang-illegalstateexception-this-call-must-happen-in-the-awt-event) – talex
Это не дубликат, мой случай когда действие включено/отключено с помощью «action.setEnabled (state)». Другая связана с инициализацией GUI –