Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Совместно используйте java.lang. Объект между двумя потоками, единственная цель которых состоит в том, чтобы сказать рабочий поток, когда это может продолжить свою работу. Каждый раз, когда рабочий поток достигает точки, где он должен спать, он делает это:
stick.wait();
, Когда поток представления заканчивает свою работу onDraw, он называет это:
stick.notify();
Примечание требование, чтобы поток представления владел монитором на объекте. В Вашем случае это должно быть довольно просто осуществить с маленьким синхронизирующим блоком:
void onDraw() {
...
synchronized (stick) {
stick.notify();
}
} // end onDraw()
Консультируются с javadoc для java.lang. Объект на этих методах (и notifyAll, на всякий случай); они очень хорошо записаны.
Если Вы хотите более высокий уровень concurreny API (с вещами как Барьеры), Вы могли бы попробовать бэкпорт API java 5 параллелизма, который работает над java 1.3 и выше и может работать над Android. Подобные Object.wait/notify будут работать, но они могут быть немного краткими.