Наблюдаемый в Java не работает должным образом? - PullRequest
0 голосов
/ 24 ноября 2011

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

В моей активности приложения для Android:

public void newGame(View view)
{
    poleLeft.clear();
}

В моем классе поляков:

public void clear()
{
    stack.clear();
    size = 0;
    head = 0;

    setChanged();
    notifyObservers();
}

В моем классе просмотра:

private class PoleObserver implements Observer
{
    public void update(Observable observable, Object data)
    {
        postInvalidate();
    }
}

и

    leftPole.addObserver(new PoleObserver());

По сути, все, что я хочу сделать, это иметь определенное количество элементов на полюсе (poleLeft), очистить его и перерисовать представление приложения, чтобы отразить эти изменения. Однако, когда я нажимаю кнопку, полюс очищается, но представление не изменяется, и помещение System.out.println в метод обновления никогда не приводит к выводу, поэтому он никогда не запускается. Почему это было бы?

Ответы [ 2 ]

0 голосов
/ 24 июля 2013

Вы, похоже, не публикуете «настоящий» код, как в конструкторе игры, который вы используете poleLeft, и в классе представления leftPole.Без небольшого, работоспособного примера мы можем помочь немногим.

(Или, возможно, это несоответствие является источником проблемы!)

Некоторые предложения:

  • Используйте @override, чтобы убедиться, что метод update действительно реализует interface так, как вы думаете.Возможно, вы импортируете другой Observer, который работает не так, как вы думаете.

  • Используйте Log вызовы, чтобы убедиться, что вы действительно устанавливаете наблюдателя нато же самое можно заметить, как вы думаете.Вы можете сделать это, напечатав объекты 'identityHashCode в журнал.

0 голосов
/ 24 ноября 2011

Вы выполняете что-то не в порядке? Этот пример хорошо работает для меня.

import java.util.Observable;
import java.util.Observer;

public class Pole extends Observable {

    public void clear()
    {
        setChanged();
        notifyObservers();
    }

    public static class PoleObserver implements Observer
    {
        public void update(Observable observable, Object data)
        {
            System.out.println("Updated");
        }
    }

    public static void main(String[] args) {

        Pole p = new Pole();
        p.addObserver(new Pole.PoleObserver());
        p.clear();

    }

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