2016-10-04 7 views
-3

Я разместил actionListener на некоторых созданных JButtons. Это так, что если пользователь нажимает кнопку, вызывается другой класс. Я хочу, чтобы обнаружить, если этот класс закончил свою функцию ... для большей ясности, вот мой код:Обнаружив, что функция кнопки завершена

Quest.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent iq) { 

     JButton source = (JButton) iq.getSource(); 

      if (point.equals(points.get(0))){ 

     q1 = new Quest1(); //class called up 
     source.setEnabled(false); 

     //This is where my problem lies.... I want to be able to detect when the button's action is finished...than some other action takes place! 
} 
}); 

пожалуйста, помогите мне .....

+0

Вот и все! ... люди безрезультатно! –

+2

Люди вниз, потому что ваш вопрос на самом деле не очень точный; почти очень близко к «непонятным, что вы просите». Пожалуйста, поймите: вы должны увидеть * any * downvote или закрыть запрос как ** обратную связь ** к вам о качестве вашего ввода. – GhostCat

+0

Хотите, чтобы это действие обнаружило, есть ли другие действия, зарегистрированные на кнопке, и дождитесь завершения всех этих действий? – erickson

ответ

3

Вы уже писали код на код!

Вы видите, если вы положили в дополнительных усилий, метод, который вызывает другой метод (например, в данном случае: с помощью нового для построения другого объекта) делает вещи в последовательности!

Смысл: ваша последняя строка с комментарием в вашем слушателе достигнута после все остальное в вашем методе произошло!

Единственное, чтобы быть в курсе: если конструктор Quest будет создание и запуск другого тему, то, конечно, все было бы иначе. Тогда вам понадобится ручная связь между задействованными нитями. Но я как-то догадываюсь, что это не так.

+0

Это правильный ответ ... Если вы нигде не закрутите другой поток, метод будет выполнен на следующей строке. –

+0

Точно !! .... Я вызываю еще один класс где-то ... и я хочу определить, закончил ли этот класс выполнение, тогда происходит что-то еще! –

+0

Что ты имеешь в виду? Вы начинаете новую тему или нет? Игнорирование другого класса по сути не выполняется в другом потоке. Что касается кода, который вы предоставили, все работает сверху вниз. –

0

Почему ты просто не называть метод там?

Quest.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent iq) { 
    JButton source = (JButton) iq.getSource(); 
    if (point.equals(points.get(0))){ 
     q1 = new Quest1(); //class called up 
     source.setEnabled(false); 
    } 
    onButtonActionDone() 
}); 

private void onButtonActionDone() { 
    ... 
} 
+0

Я пытаюсь определить, выполнено ли действие кнопки! –

+0

А, ок. Просто переместил 'onButtonActionDone()', чтобы это отразить. –

+0

Вы могли бы это изменить логическое значение и проверить это изменение –

1

Замените boolean completed на true, затем проверьте это.

+0

Извините: если он не выполняет многопоточность, это абсолютно бесполезно; и когда он делает многопоточность, все может быть намного сложнее. Так что в любом случае; ваш ответ не помогает.Как правило: ответы, составляющие только одно предложение **, никогда не дают хорошего ответа. – GhostCat

+0

Почему он просто не помещает код, который ему нужно запустить в этом случае. Я предполагаю, что он хочет проверить, действительно ли он когда-либо был выполнен или не запущен в данный момент. –

+0

Также это многословное событие, которое выполняется в потоке графического интерфейса пользователя –