Проблема ActionListener - PullRequest
       13

Проблема ActionListener

1 голос
/ 23 марта 2009

У меня проблема с моим actionListener. Кажется, что actionListener запускается автоматически, прежде чем я нажимаю кнопку? «Это не должно появляться в консоли до нажатия кнопки» в консоли до того, как я нажимаю кнопку »... Это странно.

.... 
button1.addActionListener(this); 
button2.addActionListener(this);
....
public void actionPerformed(ActionEvent e) {

   System.out.println("This should not appear in the console before button click");

   if (e.getSource()==button1)
      System.out.println ("answer1");

   else if (e.getSource()==button2)
      System.out.println ("answer2");
   .....
}

Ответы [ 2 ]

5 голосов
/ 23 марта 2009

Вы можете узнать, откуда вызываются методы, вызвав Thread.dumpStack(). Это выведет трассировку стека в поток ошибок (возможно, консоль Java). Либо используйте отладчик и поместите точку останова в первую строку метода.

public void actionPerformed(ActionEvent e) {
   Thread.duumpStack();
   System.out.println("This should not appear in the console before button click");
   ...

Кстати: я рекомендую не использовать EventObject.getSource. Вместо этого добавьте новый слушатель для каждого действия.

Итак, ваш пример кода будет:

button1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent event) {
        System.out.println("answer1");
    } 
});
button2.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent event) {
        System.out.println("answer2");
    } 
});

К сожалению, шаблон, связанный с анонимными внутренними классами, явно многословен, но намерение яснее.

0 голосов
/ 30 марта 2009

Также убедитесь, что вы не добавили 'this' в качестве ActionListener ни к каким другим компонентам, которые могут использоваться, прежде чем нажимать любую из кнопок. Вы также можете найти в своем коде вызовы doClick (), чтобы убедиться, что вы не вызываете его программно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...