我正在尝试在Android平台上的运行时动态加载类。该类包含在单独的库JAR文件中,但与APK打包在一起(按照SDK中的新库机制)。使用Class.forname方法时,我收到未找到的类异常。我已经看到了有关DexClassLoader方法的一些讨论,但是我找不到如何使用它的好例子(以及是否是最好的使用方法-
它似乎比forname方法复杂得多!)。
如果有人可以提供示例代码片段来说明这一点,我将不胜感激。
非常感谢您的帮助。
这是一个动态加载DevicePolicyManager
类的示例。
Class myClass =
ClassLoader.getSystemClassLoader().loadClass("android.app.admin.DevicePolicyManager")
Object DPMInstance = myClass.newInstance();
Method myMethod = myClass.getMethod("setPasswordQuality",
new Class[] { ComponentName.class,
int.class });
myMethod.invoke(DPMInstance,
new Object[] { myComponentName,
PASSWORD_QUALITY_NUMERIC });
这很有用,因此您可以选择仅在设备运行足够高的SDK版本时加载类。
问题内容: 为什么用Java这么难?如果要使用任何类型的模块系统,则需要能够动态加载JAR文件。有人告诉我,有一种方法可以通过编写自己的方法来完成,但这对于(至少在我看来)应该像调用以JAR文件作为其参数的方法一样容易的事情来说是很多工作。 对执行此操作的简单代码有何建议? 问题答案: 很难的原因是安全性。类加载器是不可变的。你不应在运行时随意向其添加类。实际上,我很惊讶能与系统类加载器一起使用。
问题内容: 为什么用Java这么难?如果要使用任何类型的模块系统,则需要能够动态加载JAR文件。有人告诉我,有一种方法可以通过编写自己的方法来完成,但这对于(至少在我看来)应该像调用以JAR文件作为其参数的方法那样容易的事情来说是很多工作。 问题答案: 很难的原因是安全性。类加载器是不可变的。您不应在运行时随意向其添加类。实际上,我很惊讶能与系统类加载器一起使用。这是制作自己的子类加载器的方法:
问题内容: 我有以下代码: 它不起作用。我给了两个按钮,如果按下第一个,则应该加载。如果第二个被按下,则应加载。 我怎样才能做到这一点? 问题答案: 您不能以这种方式将HTML嵌入Javascript。基本上,您想要的是嵌入一个脚本元素,单击按钮时指向某个javascript文件。可以通过将事件与DOM结合来完成:
问题内容: 我的应用程序的类路径中有一个jar文件。在运行时,我将新类添加到jar文件中,有时还修改现有类的字段/方法。目前,我正在使用URLClassLoader来动态加载类。动态添加的新类可以正确加载,并且可以在运行时使用它们。但是,它无法重新加载在运行时修改的现有类。我读过许多文章,其中指出我们需要显式地处理重新加载,因为一旦加载了该类,则在销毁对该类的所有引用之前,都不会重新加载该类。我也
问题内容: 我正在构建一个Java应用程序,该应用程序的某些部分需要每日更新。我想将频繁更新的零件作为小jar文件从服务器下载到内存。我正在将jar文件下载为字节流,而不使用URLClassloader。 如何使jar文件中的类可从我的自定义类加载器供系统类加载器使用? 我如何确保下载jar文件和加载的类永远不会缓存或写入磁盘。 问题答案: 您可以从内存中加载自定义类加载器。您可以强制系统加载器从
如何从jar文件中加载已编译的jasper报告,而不是通过硬盘驱动器上的特定路径? 我的报告在我的机器上运行良好,因为我已经设置了报告的路径: 但是当在另一台计算机上从完成的jar中工作时,报告没有被加载。所以我尝试使用输入流并将其传递给JasperFillManager,但是没有任何效果——输入流没有找到文件。我走错路了吗? 我最初的工作代码: 现在,更改后的代码不起作用: 任何帮助非常感谢!