XML文件被用作临时缓存,以通过SOAP请求存储临时值(多个配置值)。多个线程将使用此文件,因此如果文件已经更新,我不想写入该文件。在第一遍代码中,我希望缓存返回null,然后文件将被更新。但是,退出finally块时得到一个InvocationTargetException
,并且程序失败。我不明白为什么CacheValues
空对象会引发异常。
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
}
...
}
最佳答案
使用反射并使用java.lang.reflect.Method
进行调用时,会发生InvocationTargetException。这可能在代理类或其他侦听,检测类中发生。
在调用时,发生一个异常,该异常被包装在InvocationTargetException中,您可以使用getCause()
或查看堆栈跟踪来获取原始异常。
关于java - 预期的空指针会导致意外的InvocationTargetException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18447693/