我已经看到了相当多的奇怪错误,但这一次,我完全被难住了。尝试调用同一类中的方法时出现 NullPointerException。
首先,一些代码。让我们从有问题的行开始。当然,该方法比这更长,但这是它的开始和所有相关的:
protected synchronized void checkTransfers() {
if (isPaused())
return;
}
isPaused
是一个简单的getter方法:
protected boolean isPaused() {
return paused.get();
}
为了完整起见:
protected AtomicBoolean paused = new AtomicBoolean(false);
现在的问题是,大约 50% 的这段代码运行时,它只是简单地抛出一个 NullPointerException 异常if (isPaused())
,这对我来说毫无意义。该checkTransfers()
方法与isPaused()
. 我的同事尝试通过提到问题可能出在所涉及的多线程中来帮助我,例如,如果另一个线程获得了 CPU 时间并删除了它对对象的引用,但该对象永远不应该在我的代码中的任何地方丢失它的引用。另外:this
一旦 NPE 触发,仍然正确定义。
堆栈跟踪如下:
main@830013674640" prio=5 可运行 java.lang.Thread.State:在 com.omines.android.communicationmanager.CommunicationManager.checkTransfers(CommunicationManager.java:125) 在 com.omines.android.communicationmanager.DownloadTask.onPostExecute(DownloadTask .java:105) 在 com.omines.android.communicationmanager.DownloadTask.onPostExecute(DownloadTask.java:20) 在 android.os.AsyncTask.finish(AsyncTask.java:602) 在 android.os.AsyncTask.access$600(AsyncTask .java:156) 在 android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java: 154) 在 android.app.ActivityThread.main(ActivityThread.java:4945) 在 java.lang.reflect.Method.invokeNative(Method.java:-1) 在 java.lang.reflect。Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)在 dalvik.system.NativeStart.main(NativeStart.java:-1)
第 125 行checkTransfers()
是上面的 if 语句。
有谁知道什么会导致这样的行为?