- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个简单的函数,用于从所选目录加载类“Myclass”。
// Variables
File temp = new File("some path...");
String class_name = "MyClass";
// Directory url
URL[] urls = null;
try {
urls = new URL[]{temp.toURI().toURL()};
} catch (MalformedURLException e) {
e.printStackTrace();
}
// Loading the class
ClassLoader cl = new URLClassLoader(urls);
Class clazz = null;
Object clazz_instance = null;
try {
// Loads class
clazz = cl.loadClass(class_name);
// Creates instance
clazz_instance = clazz.newInstance();
// Invoking method "myMethod"
try {
Method m = clazz.getMethod("myMethod");
m.invoke(clazz_instance);
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | NullPointerException e) {
e.printStackTrace();
}
} catch (NoClassDefFoundError | ClassNotFoundException | InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
让我们假设我有以下类(class):
public class MyClass {
public void myMethod() {
MyOtherClass moc = new MyOtherClass();
// ...... some code
}
}
class MyOtherClass {}
但是当我想调用方法“myMethod”时,我得到:
java.lang.reflect.InvocationTargetException
Caused by: java.lang.IllegalAccessError: tried to access class "MyOtherClass" from class "MyClass"
我假设问题来自于“MyOtherClass”不是公开的(不可能,因为它与“MyClass”在同一个文件中)。
我该如何解决这个问题?
最佳答案
这是因为您没有首先从代码中加载依赖类。将您的 MyOtherClass 放在它自己的文件中并将其设置为公开。然后加载如下。
cl.loadClass("MyOtherClass");
cl.loadClass(class_name);
如果您坚持将这两个类放在同一个文件中。定义如下
public class MyClass {
class MyOtherClass {}
public void myMethod() {
MyOtherClass moc = new MyOtherClass();
}
}
关于Java - 调用方法导致 IllegalAccessError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36063896/
我在运行 Android 仪器测试时收到 IllegalAccessError。 这是 Logcat 输出: java.lang.IllegalAccessError: Class ref in pr
当我运行下面的源代码时,我在 shell 窗口中看到的运行时错误如下: Exception in thread "main" java.lang.IllegalAccessError: tried t
我在我的类方法中遇到了与 IllegalAccessError 相关的问题(仅在 Android 8 设备上) 我更新了: Android Studio 到 3.3 Gradle 到 3.3.0 的
我目前正在对未记录的代码进行维护,并且在 Spring Boot 中运行类时偶然发现了一个奇怪的错误。代码在执行时会引发 IllegalAccessError,但可以正确编译。 似乎原始团队尝试访问
我正在为类(class)设置我的第一个程序,但我一直困惑为什么我的程序无法运行并尝试调试。我需要做什么来调试这个错误? 我尝试添加库,但这似乎不起作用。 import javafx.event.Act
我正在翻译 this code到 Clojure。如您所见,我必须扩展 ArthurFrame 类,但每次使用 (proxy [ArthurFrame] [] ... )。 知道为什么吗?这是 cla
我有以下情况: 同一工作区中的 2 个 Eclipse 项目:Apa 和 Bepa(为简洁起见,使用化名)。 Apa 项目引用(包括)Bepa 项目。 我在 Bepa 有一个类 X,具有公共(publ
Oracle JavaDocs 解释说 IllegalAccessError 是 "Thrown if an application attempts to access or modify a fi
我目前正在编写一个自动更新程序,它可以从 GitHub 下载最新版本的插件。我禁用了该插件,我可以替换它,现在我想启用它,但出现以下错误 java.lang.IllegalAccessError: t
我有一个简单的函数,用于从所选目录加载类“Myclass”。 // Variables File temp = new File("some path..."); String
在下面的代码中,我给出了两个主要类 - TestWorks 和 TestCompilesButFails。我不确定我是否理解失败 - 似乎 Arrays.asList() 表达式被赋予类型“Abstr
我创建了一个自定义 ParquetOutputFormat(org.apache.parquet.hadoop 中的类)来覆盖 getRecordWriter 方法。在 getRecordWriter
我正在开发一个旨在使用 Renderscript 支持库的应用程序。使用 Android Studio 0.5.4 和 Gradle 1.11 进行开发。 配置我使用的渲染脚本 android {
我的应用程序在 5+ 和 6+ 上完美运行,但在 7 上却不行。当应用程序尝试登录服务器时抛出此异常: 09-01 09:52:53.821 2654-2718/com.pipodi.italians
我昨天买了一台新电脑 (Dell XPS 13)。我刚刚安装了 JDK 并将我所有的旧 Java 项目复制到我的新设备上,但是当我尝试运行这些程序中的任何一个时,我遇到了非法访问错误。 编辑:注意:在
我正在用 jackson 开发软件,但完全卡住了......当我用 java -jar .jar 运行 spring-boot 程序时命令,我收到以下错误: ... Caused by: org.sp
IllegalAccessError 类有两个构造函数,IllegalAccessError() 和 IllegalAccessError(String s)。 为什么 IllegalAccessEr
我找到了 this JDK bug并想了解它发生的原因。 场景(取自 the bug report)非常简单:一个 class 声明一个 private 方法,一个 interface 声明一个 pu
该应用程序包含一个短暂显示的初始屏幕,该 Activity 正在使用 IdlingResource 进行插桩测试,以便测试知道初始屏幕何时关闭。问题是 SplashActivity 在运行 API 1
我是一名具有编写 PHP、python 和 ruby 经验的新手工程师。我正在尝试为一个用 clojure 编写的项目做出贡献。我正在尝试向项目添加一个库,但在添加库并运行后 lein uberj
我是一名优秀的程序员,十分优秀!