0
XML文件正被用作臨時高速緩存以通過SOAP請求(多個配置值)存儲臨時值。多個線程將使用此文件,所以如果它已被更新,我不想寫入該文件。在第一遍代碼中,我期望緩存返回null,之後文件將被更新。但是,退出finally塊時我得到一個InvocationTargetException
,程序失敗。我不明白爲什麼null CacheValues
對象拋出異常。當使用反射預期的空指針會導致意外的InvocationTargetException
public class TempCache{
private final ReadWriteLock myLock = new ReentrantReadWriteLock();
private final MyCache cache = XmlCache.getInstance(); //creates singleton
//instance, but doesn't
//set values upon
//initialization...
public CacheValues getCache(){
Lock lock = myLock.readLock();
CacheValues cv = null;
try{
lock.lock();
cv = cache.getCacheValues(); //returns null on the first pass...
}finally{
lock.unlock();
} // exception thrown here
if(cv == null){
refreshCache(); //submits SOAP request to set the xml cache values
}
...
}
NullPointerException可以在這裏被拋出的唯一方法是如果'cache'爲null或'getCacheValues'中的某些內容拋出NPE。可能需要您的堆棧跟蹤 –
您可以檢查文檔以查看「getCacheValues」是否引發該異常。 – krsteeve