繁体   English   中英

在android中创建EHCache实例时出现java.lang.ExceptionInInitializerError

[英]java.lang.ExceptionInInitializerError when creating instance of EHCache in android

我正在尝试在Android中使用ehCache,并收到以下错误

java.lang.ExceptionInInitializerError
    at net.sf.ehcache.EhcacheDefaultClassLoader.getInstance(EhcacheDefaultClassLoader.java:29)
    at net.sf.ehcache.config.Configuration.<init>(Configuration.java:208)
    at net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(ConfigurationFactory.java:152)
    at net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(ConfigurationFactory.java:103)
    at net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(ConfigurationFactory.java:140)
    at net.sf.ehcache.CacheManager.newInstance(CacheManager.java:892)
    at net.sf.ehcache.CacheManager.create(CacheManager.java:873)
    at net.sf.ehcache.CacheManager.getInstance(CacheManager.java:907)

Caused by: java.lang.NullPointerException: parentLoader == null && !nullAllowed
    at java.lang.ClassLoader.<init>(ClassLoader.java:210)
    at java.lang.ClassLoader.<init>(ClassLoader.java:202)
    at net.sf.ehcache.EhcacheDefaultClassLoader.<init>(EhcacheDefaultClassLoader.java:35)
    at net.sf.ehcache.EhcacheDefaultClassLoader.<clinit>(EhcacheDefaultClassLoader.java:26)
    at net.sf.ehcache.EhcacheDefaultClassLoader.getInstance(EhcacheDefaultClassLoader.java:29) 
    at net.sf.ehcache.config.Configuration.<init>(Configuration.java:208) 
    at net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(ConfigurationFactory.java:152) 
    at net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(ConfigurationFactory.java:103) 
    at net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(ConfigurationFactory.java:140) 
    at net.sf.ehcache.CacheManager.newInstance(CacheManager.java:892) 
    at net.sf.ehcache.CacheManager.create(CacheManager.java:873) 
    at net.sf.ehcache.CacheManager.getInstance(CacheManager.java:907)

这是我尝试初始化的代码

private static Cache getCache(String cacheName) throws IllegalStateException{
    CacheManager cacheManager = CacheManager.getInstance();
    Cache cache;
    if(!cacheManager.cacheExists(cacheName)) {
        cacheManager.addCache(cacheName);
    }
    cache = cacheManager.getCache(cacheName);
    return cache;
}

看起来EHCache无法在android中工作? 有人可以对此有所启发吗? 收到错误消息后,我还将ehcache.xml放入了res / xml /中的一些配置中。ehcache.xml

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"  monitoring="autodetect" dynamicConfig="true">

    <!-- By default, Ehcache stored the cached files in temp folder. -->    <!-- <diskStore path="java.io.tmpdir" /> -->

    <!-- Ask Ehcache to store cache in this path -->    <!--<diskStore path="c:\\cache" /> -->

    <!-- Sample cache named cache1
    This cache contains a maximum in memory of 10000 elements, and will expire
    an element if it is idle for more than 5 minutes and lives for more than
    10 minutes.

    If there are more than 10000 elements it will overflow to the
    disk cache, which in this configuration will go to wherever java.io.tmp is
    defined on your system. On a standard Linux system this will be /tmp" 
    -->     
    <cache name="cache1" maxEntriesLocalHeap="10000" maxEntriesLocalDisk="1000" eternal="false" diskSpoolBufferSizeMB="20" timeToIdleSeconds="300" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LFU" transactionalMode="off">         
        <persistence strategy="localTempSwap" />
    </cache>

</ehcache>

Ehcache无法找到ehcach.xml文件。 它不知道res / xml文件夹。

因此,尝试以这种方式以编程方式配置缓存(ehcache 2.10):

// create default CacheManager
Configuration config = new Configuration();
config.setName("Mngmt");
// [...]
CacheManager cacheManager = CacheManager.create(config);

int maxEntriesLocalHeap = 100;
String cachName = "cacheName";
Cache cache = new Cache(
  new CacheConfiguration(cachName, maxEntriesLocalHeap)
    .memoryStoreEvictionPolicy(MemoryStoreEvictionPolicy.LFU)
    .eternal(false)
    .timeToLiveSeconds(120)
    .timeToIdleSeconds(60)
    .diskExpiryThreadIntervalSeconds(0));
cacheManager.addCache(cache);

您将在这里找到更多信息:以编程方式创建缓存

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM