- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在将 ServiceLoader
集成到我的 Android 应用程序以集成插件系统时遇到问题。
public class StrategieClassLoader extends URLClassLoader {
private ClassLoader m_SystemClassLoader;
private static Set<String> m_SaveClasses = new HashSet<String>();
{
m_SaveClasses.add( ESpielsteinFarbe.class.getName() );
m_SaveClasses.add( ISpielstein.class.getName() );
m_SaveClasses.add( SpielsteinPosition.class.getName() );
m_SaveClasses.add( ISpielzug.class.getName() );
m_SaveClasses.add( IStrategie.class.getName() );
m_SaveClasses.add( IStrategieFactory.class.getName() );
m_SaveClasses.add( StrategieException.class.getName() );
}
public StrategieClassLoader(URL[] p_Classpath, ClassLoader p_Parent) {
super(p_Classpath, p_Parent);
m_SystemClassLoader = getSystemClassLoader();
}
@Override
protected synchronized Class<?> loadClass(String p_ClassName, boolean p_Resolve)
throws ClassNotFoundException {
Class<?> l_Class = findLoadedClass(p_ClassName);
if (l_Class == null) {
if (isSystemClass(p_ClassName)) {
l_Class = super.loadClass(p_ClassName, p_Resolve);
} else {
try {
l_Class = findClass(p_ClassName);
} catch (ClassNotFoundException e) {
l_Class = super.loadClass(p_ClassName, p_Resolve);
}
}
}
if (p_Resolve) {
resolveClass(l_Class);
}
return l_Class;
}
private boolean isSystemClass(String p_ClassName) {
return ( m_SaveClasses.contains( p_ClassName ) || p_ClassName.startsWith("java.") || p_ClassName.startsWith("javax.") ||
p_ClassName.startsWith("com.sun."));
}
@Override
public URL getResource(String p_ResourceName) {
URL l_ResourceUrl = findResource(p_ResourceName);
if (l_ResourceUrl == null) {
l_ResourceUrl = super.getResource(p_ResourceName);
}
return l_ResourceUrl;
}
@Override
public Enumeration<URL> getResources(String p_ResourceName) throws IOException {
Enumeration<URL> l_LocalUrls = findResources(p_ResourceName);
Enumeration<URL> l_ParentUrls = null;
if (getParent() != null) {
l_ParentUrls = getParent().getResources(p_ResourceName);
}
final List<URL> l_Urls = new ArrayList<URL>();
if (l_LocalUrls != null) {
while (l_LocalUrls.hasMoreElements()) {
l_Urls.add(l_LocalUrls.nextElement());
}
}
if (l_ParentUrls != null) {
while (l_ParentUrls.hasMoreElements()) {
l_Urls.add(l_ParentUrls.nextElement());
}
}
return new Enumeration<URL>() {
Iterator<URL> l_UrlIterator = l_Urls.iterator();
public boolean hasMoreElements() {
return l_UrlIterator.hasNext();
}
public URL nextElement() {
return l_UrlIterator.next();
}
};
}
@Override
public InputStream getResourceAsStream(String p_ResourceName) {
URL l_ResourceUrl = getResource(p_ResourceName);
try {
return l_ResourceUrl != null ? l_ResourceUrl.openStream() : null;
} catch (IOException e) {
}
return null;
}
}
public static List<IStrategieFactory> load(String p_path)
{
List<IStrategieFactory> l_Facs = new ArrayList<IStrategieFactory>();
File l_PluginDir = new File(p_path);
for( File dir: l_PluginDir.listFiles() )
{
if( dir.isDirectory() )
{
File[] l_Jars = dir.listFiles( new FilenameFilter() {
@Override
public boolean accept(File file, String name) {
// TODO Auto-generated method stub
return name.endsWith( ".jar" );
}
});
List<URL> l_Urls = new ArrayList<URL>();
for( File jar: l_Jars )
{
try {
l_Urls.add( jar.toURI().toURL() );
} catch (MalformedURLException ex) {
ex.printStackTrace();
}
}
if( !l_Urls.isEmpty() )
{
StrategieClassLoader l_ClassLoader = new StrategieClassLoader(l_Urls.toArray( new URL[ l_Urls.size() ]), Thread.currentThread().getContextClassLoader() );
ServiceLoader<IStrategieFactory> loader = ServiceLoader.load(IStrategieFactory.class, l_ClassLoader);
for( IStrategieFactory fac : loader )
{
l_Facs.add( fac );
}
}
}
}
m_Factories = l_Facs;
return m_Factories;
}
}
从externalStorage上的assets文件夹复制的.jar文件,该类可以访问所有文件,但运行后崩溃
ServiceLoader<IStrategieFactory> loader = ServiceLoader.load(IStrategieFactory.class, l_ClassLoader);
13967-13967/dievierlustigen5.dhbw.de.a4wins E/AndroidRuntime: FATAL EXCEPTION: main
Process: dievierlustigen5.dhbw.de.a4wins, PID: 13967
java.util.ServiceConfigurationError: Couldn't instantiate class de.dhbw.fourwins.strategy.EasyStratFactory
at java.util.ServiceLoader$ServiceIterator.next(ServiceLoader.java:216)
at dievierlustigen5.dhbw.de.a4wins.strategy.StrategyLoader.load(StrategyLoader.java:78)
at dievierlustigen5.dhbw.de.a4wins.DifficultyActivity.onCreate(DifficultyActivity.java:43)
at android.app.Activity.performCreate(Activity.java:6877)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3208)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3351)
at android.app.ActivityThread.access$1100(ActivityThread.java:222)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1796)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7230)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.net.URL.getProtocol()' on a null object reference
at java.net.URLClassLoader.getPermissions(URLClassLoader.java:614)
at java.security.SecureClassLoader.getPD(SecureClassLoader.java:140)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:93)
at java.net.URLClassLoader.access$600(URLClassLoader.java:55)
at java.net.URLClassLoader$URLJarHandler.createClass(URLClassLoader.java:364)
at java.net.URLClassLoader$URLJarHandler.findClass(URLClassLoader.java:303)
at java.net.URLClassLoader.findClass(URLClassLoader.java:748)
at dievierlustigen5.dhbw.de.a4wins.strategy.StrategieClassLoader.loadClass(StrategieClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at java.util.ServiceLoader$ServiceIterator.next(ServiceLoader.java:214)
at dievierlustigen5.dhbw.de.a4wins.strategy.StrategyLoader.load(StrategyLoader.java:78)
at dievierlustigen5.dhbw.de.a4wins.DifficultyActivity.onCreate(DifficultyActivity.java:43)
at android.app.Activity.performCreate(Activity.java:6877)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3208)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3351)
at android.app.ActivityThread.access$1100(ActivityThread.java:222)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1796)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7230)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
也许有人知道如何解决该错误?
最佳答案
Android 无法在运行时加载普通的 .class 文件,因为Android 使用其他 VM,该 VM 只能读取 .dex 文件。
所以我必须使用DexClassLoader
关于java - Android中的ServiceLoader "Couldn' t实例化类”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39812183/
这里的 IT 网络/编程学生试图完成一项作业,但我遇到了障碍。我们的任务是读取文本文件,将单词放入 ArrayList 中,并对内容执行字符串操作。我能够将单词拉入 ArrayList、按升序对内容进
编辑:我收到以下错误代码: Error adding accessory The operation couldn’t be completed. (HMErrorDomain error 2.) 和
您好,我正在尝试测试套接字激活机制,但无法连接到服务器。 curl --unix-socket/run/gunicorn.sock本地主机 curl: (7) Couldn't connect to
所以我安装了sandbox (运行 centOS)来自 hortonworks在 virtualBox带网络配置>>> bridged network我编辑了bashrc导出http_proxy和 h
我目前正在开发一个android应用程序,提交一个post请求并处理相应的响应。 我能够将发布请求发送到相应的 URL,但是当我尝试检索响应时,我得到了一半的 HTML 内容,然后是“*无法从 STD
我在将 ServiceLoader 集成到我的 Android 应用程序以集成插件系统时遇到问题。 public class StrategieClassLoader extends URLClass
我有一个类似于以下的自定义数据类型: data Token = Number Int | Otherthings 我希望能够以一种方式使用“数字”,以另一种方式使用其他东西。所以
当我尝试从 Visual Studio Code 运行一个简单的 React Native 应用程序时,我收到以下错误消息。 Scanning folders for symlinks in C:\P
我最近从Java搬到了Kotlin。将整个项目转换为Kotlin,将pom.xml转换为build.gradle。我正在使用Kotlin,Gradle,Cucumber Sernity,Appium构
我在执行docker-compose命令时遇到Powershell中的错误: 尽管从Docker Quickstart Terminal运行相同的命令可以正常工作: 最佳答案 确保首先在Powersh
当我运行docker build时,我得到了: Sending build context to Docker daemon 10.24kB WARN[11935] Couldn't run aup
我在运行 SDL 程序时遇到此错误。它编译得很好,但是窗口打开了一小会儿然后就关闭了。 这是我的代码: //Using SDL and standard IO #include #include
我正在编写一个基于 Google map 的 Android 应用程序。应用程序本身运行良好,没有任何问题。我可以看到 map ,缩放到我的当前位置等等。根据 AndroidManifest.xml,
我在实际设备上仅在生产和开发容器上都遇到了这个错误。模拟器能够很好地获取记录。这发生在通过 XCode 运行的开发构建、TestFlight 构建和 AppStore 上的实时生产构建上。 所有设备
我正在创建一个模板化的快速排序函数,它应该允许我使用迭代器对一个定制的双向链表类进行快速排序。我遇到了错误 In file included from main.cpp:21.0: quicksort
我有一个模板类和一个具有模板返回类型的函数: template class Wrapper { public: Wrapper(const T& _data) : data(_data) {
将 Jersey 从 1.15 版升级到 1.17 版后,它开始记录以下消息: Apr 2, 2013 5:13:06 PM com.sun.jersey.server.wadl.generators
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我有一个 android 应用程序在我将设备更新到 android 4.4 (kitkat) 之前一直运行没有问题。 现在我开始收到这个错误,并且程序的某些部分在日志 cat_ 中被破坏了_ Andr
我通过 git clone 成功安装了 Directus CMS。在数据库中创建了 15 个表。在/config 文件夹中,我的 projectkey.php 文件也已创建。安装后我想使用我的凭据登录
我是一名优秀的程序员,十分优秀!