- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Android 中遇到类加载器问题。至少我认为它与类加载器有关。所以这就是问题所在...我有一个使用自定义小部件库的项目,我们称之为 CustomDialogView。它是 android View 对象的子类。我有一个我创建的扩展 CustomDialogView 的对话框...因此,重要的是要提及在此过程(以及最终的 Activity )中如何创建和设置 View 的结构。
我的项目是一个 Android 服务,它通过 ContentResolver 将 View 注册到另一个进程。另一个进程然后提取此数据并将根据发送的类创建 View 。因此, View 最终在另一个过程中(在一个 Activity 中)被创建和膨胀。我知道,这很令人困惑,但这是我们的应用程序所使用的方法。因此,最终我可能需要在 View 代码中显示一个对话框。他们给了我一个标准的对象,它使用反射来调用显示对话框方法。所以这里是代码 fragment :
private static void showTheDialog(Object mainActivity, CustomDialogView view, boolean isModal) {
try {
mainActivity.getClass().getMethod("showDialog", View.class, Boolean.TYPE).invoke(mainActivity, view, isModal);
} catch (Exception var4) {
Log.w(TAG, var4.getClass().getName(), var4);
}
}
所以在他们的最后,他们在感兴趣的对象中有这个方法:
public void showDialog(View dialogView, boolean isModal)
所以问题就出在这里。在上面提到的方法(showDialog)中。他们尝试将 dialogView 转换为 CustomDialogView,因此:
CustomDialogView dialogContent = (CustomDialogView)dialogView;
结果我得到一个 ClassCastException。我确认我使用的是在两个项目之间实现 CustomDialogView 的相同版本的库。我在调用 showTheDialog 时打印了类加载器,我得到:
dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.this.is.project.myproject-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.this.is.project.myproject-1, /vendor/lib, /system/lib]]]
我在 showDialog(在他们的项目中)中打印出类加载器,我得到:
dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.this.is.thier.project.thierproject-1.apk", zip file "/data/data/com.this.is.thier.project/code_cache/secondary-dexes/com.this.is.thier.project.thierproject-1.apk.classes2.zip", zip file "/data/data/com.this.is.thier.project/code_cache/secondary-dexes/com.this.is.thier.project.thierproject-1.apk.classes3.zip", zip file "/data/data/com.this.is.thier.project/code_cache/secondary-dexes/com.this.is.thier.project.thierproject-1.apk.classes4.zip", zip file "/data/data/com.this.is.thier.project/code_cache/secondary-dexes/com.this.is.thier.project.thierproject-1.apk.classes5.zip", zip file "/data/data/com.this.is.thier.project/code_cache/secondary-dexes/com.this.is.thier.project.thierproject-1.apk.classes6.zip"],nativeLibraryDirectories=[/data/app-lib/com.this.is.thier.project.thierproject-1, /vendor/lib, /system/lib]]]
所以,我们使用了两个不同的类加载器,对吧?我很难理解这个概念。如果您有任何其他问题,请告诉我。
最佳答案
所以,看起来我正在使用多个类加载器。您可能知道,这可能会导致发生类强制转换异常。为了解决,我可以在传递的对象上使用反射。所以这是一个小 fragment :
obj.getClass().getMethod("getterMethod").invoke(obj);
上面的例子是把传入的对象(obj)传入,通过反射获取它的类,然后调用我需要的方法。我希望这对其他人有帮助。现在没有类加载器问题。谢谢。
关于java - Android 我使用了多个 ClassLoader/PathClassLoaders 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54579801/
我只是想知道如果我知道类加载器,我是否可以在 JVM 运行时获取类的实例(对对象的引用)。请引用下面的代码来理解我的问题。 A类: package local.run; public class A
我们正在尝试调试 WebStart 的一个不可重现的问题,即访问 Jars 内的资源将“随机”失败。也许每 1000 个应用程序运行中就有一个会出现此错误,这种错误可能发生在从 jar 读取资源的任何
在从属实例(AIX 5.3 上的主服务器;Windows 2008(R2) 上的从属服务器)上运行 Maven2 作业时,我收到以下消息(下面粘贴了完整的堆栈跟踪):“java.lang.ClassN
我正在编写一个游戏引擎,我需要在其中分析程序中提到的每个类。由于这是一个游戏引擎,因此它将作为 JAR 文件附加到客户的项目中。从该 JAR 文件中,我需要能够扫描客户端正在使用的每个类。 所以我想我
Java安全之BCEL ClassLoader 写在前面 BCEL平常在测试反序列化的时候也经常会用到,比如延时测Gadget以及在某些场景下执行命令不是那么顺手的情况下选择BCEL去打内存马,就像F
比如说,我有一个 A 类,由 ClassLoader CL1 加载。 我有另一个 B 类,由 ClassLoader CL2 加载。 假设这两个类现在都由各自的类加载器加载。 如果我从 A 执行以下语
在 org.dozer.BeanFactory.createBean(Object, Class, String) 的实现中我尝试将对象转换为它的类型。如果我部署所有 bundle ,即关闭并启动所有
它过去曾经可以工作,但是我中间没有发生什么,现在它总是返回null。 要读取的文件在项目root diretory中,该项目与Paths.get(".")的输出相对应。 注意:功能是顶级的 我正在读取
在 org.dozer.BeanFactory.createBean(Object, Class, String) 的实现中我尝试将对象转换为它的类型。如果我部署我所有的包,即关闭并启动所有包,我得到
我必须使用第 3 方平台,但该平台具有无法替换的较旧版本的 jar libjar-1.0.0.jar。该平台允许我在其上运行我自己的(平面文件)包。我将新版本的 libjar-2.0.0.jar 放在
我正在尝试使用下面的类加载器在我的 Maven 插件中加载特定的类: public ClassLoader getClassLoader(MavenProject project) { tr
以下场景: CustomClassLoaderA 加载 ClassA CustomClassLoaderB 加载 ClassB 到目前为止一切顺利,但是: CustomClassLoaderA 应该能
我试图强制使用我的自定义类加载器加载某些类,问题是在加载调用类之后仍然不知道类定义并尝试再次加载它,当然之后我们对该类有两种不同的定义,并将一种定义分配给另一种会导致类转换异常。有什么建议或想法可以解
我在尝试指示 Java 类加载器在部署后从 test/resources 目录中检索 JSON 文件时遇到了问题。 public class TestFileUtil { private st
我似乎在为我正在开发的应用程序的模块加载器中加载类时遇到问题。基本上,我将用它加载的所有类都扩展了另一个类,该类位于实际应用程序的包中。出于我们的目的,我们将其称为模块。模块位于实际应用程序之外的单独
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
我正在使用 URLClassLoader 创建一个新的类加载器,并尝试将其设置为当前线程的类加载器。但它对我来说不能正常工作。按照我的理解,如果我给当前线程设置一个classLoader,那么当前线程
昨天我想到了一个问题,下面是细节: 我有 3 个 JAR 文件,a.jar、b.jar、c.jar。这两个 jars 文件都有一个名为 com.test.Test 的类,并且 sayHello() 是
我想创建一个新的 ClassLoader 实例,它在开始时绝对不包含任何类。它不应该有一个可用的类。甚至没有 java.lang 类。我希望能够为我自己的位置手动加载每个类。 (使用覆盖的 defin
我正在开发一个个人用药时间提醒应用程序。除了在通知几次用药时间后停止之外,它几乎可以正常工作。在监视应用程序的日志猫时,我发现它在收到以下警告后正在停止警报接收器。 W/System: ClassLo
我是一名优秀的程序员,十分优秀!