InvocationTargetException

InvocationTargetException

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/

10-10 06:14