在android中创建EHCache实例时出现java.lang.ExceptionInInitializerError [英] java.lang.ExceptionInInitializerError when creating instance of EHCache in android

查看:77
本文介绍了在android中创建EHCache实例时出现java.lang.ExceptionInInitializerError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to use ehCache in Android, and getting the following error

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中不起作用?有人可以对此有所启发吗?
出现错误后,我还在res / xml /
中放入了带有某些配置的ehcache.xml。 ehcache.xml

Looks like EHCache won't work in android? Can anybody put some light on this? After I got the error, I have also put a ehcache.xml with some configuration inside res/xml/ The 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 is not able to locate the ehcach.xml file. It has no idea about res/xml folder.

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

So try to configure your cache programmatically in this way (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);

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

More Information you will find here: Creating Caches Programmatically

这篇关于在android中创建EHCache实例时出现java.lang.ExceptionInInitializerError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆