在android中创建EHCache实例时出现java.lang.ExceptionInInitializerError [英] java.lang.ExceptionInInitializerError when creating instance of EHCache in android
问题描述
我正在尝试在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屋!