0
當我的內部類試圖對包含在基類中的集合「同步」時,Android JVM會拋出空指針異常。如果我刪除了調用synchronized,代碼工作正常。當然,那麼後來併發會踢我的屁股,所以我需要找到一個解決方案。從匿名內部類線程收集同步時拋出空指針異常
我是新來的android,但不是新的Java。這個觀察者模式的實現一直在Java中爲我工作。如果我必須明確地將我的基類傳遞給一個非匿名類來做到這一點,那麼我會在屁股上感到痛苦。我也可以創建一個新的更新函數,並在基類內部同步調用,但是這個要求似乎違反了匿名類應該允許的訪問規則。
public class BaseClass
{
private ArrayList<IListenerInterface> myListeners = new ArrayList<IListenerInterface>();
public BaseClass()
{
StartWorker();
}
public void addListener(IListenerInterface listener)
{
synchronized(myListeners)
{
myListeners.add(listener);
}
}
public void StartWorker()
{
Thread myThread = new Thread(new Runnable() {
public void run() {
while(true)
{
// ... blocks here until work to be done
// then...do some work ....
// now try to update the listeners
synchronized(myListeners) // <-- NULL POINTER EXCEPTION Call back to the enclosing classes myListeners collecion
{
// never get to this point...
myListeners.Update(someWork);
}
}
}
});
}
}