当前位置: 首页 > 知识库问答 >
问题:

Java,IllegalAccessorError:超类访问检查失败

令狐宣
2023-03-14

我一直在用Java开发自己的一个小项目,最近,我编译了它,并收到了以下错误:

线程“main”java.lang.IllegalAccesserror中出现异常:超类访问检查失败:类kröw.zeale.v1.program.core.datamanager$ConstructList(在未命名模块@0x4563e9ab中)无法访问类com.sun.javafx.Collections.ObservableListWrapper(在模块javafx.base中),因为模块javafx.base没有将com.sun.javafx.Collections导出到未命名模块@0x4563e9ab

所以,我目前有三个不同的类,都在同一个包中。我的层次结构如下:

• Kröw
• DataManager
   ♦ ConstructList

在我的程序的以前版本中,我的层次结构如下所示:

• Kröw
   ♦ DataManager
      - ConstructList

在这两种情况下,ConstructList扩展了com.sun.javafx.collections.ObservableListWrapper 。(我不认为构造类在这里是必要的,我不想展示它,但如果需要,我可以展示它。)

Exception in thread "main" java.lang.IllegalAccessError: superclass access check failed: class kröw.zeale.v1.program.core.DataManager$ConstructList (in unnamed module @0x4563e9ab) cannot access class com.sun.javafx.collections.ObservableListWrapper (in module javafx.base) because module javafx.base does not export com.sun.javafx.collections to unnamed module @0x4563e9ab
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
        at java.base/java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(Unknown Source)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(Unknown Source)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(Unknown Source)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
        at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
        at kröw.zeale.v1.program.core.DataManager.<init>(DataManager.java:22)
        at kröw.zeale.v1.program.core.DataManager.getDataManager(DataManager.java:63)
        at kröw.zeale.v1.program.core.Kröw.<clinit>(Kröw.java:23)

错误中提到的类kröw的一部分:

private static final DataManager DATA_MANAGER = DataManager.getDataManager(); // line 23

错误中提到的类DataManager的部分:

static DataManager getDataManager() { // line 66
    return new DataManager();
}

public final ConstructList constructs = new ConstructList();  // line 22
public class ConstructList extends ObservableListWrapper<Construct> { // line 209

    private ConstructList() {
        super(new ArrayList<>()); // line 212
    }

   public LinkedList<Construct> getDeadConstructs() {
      ...
   }

   public LinkedList<Construct> getLivingConstructs() {
      ...
   }
}
public final ConstructList constructs = new ConstructList(null);
public final ConstructList constructs = new ConstructList();
private ConstructList() {
  super();
}

曾经是:

private ConstructList() {
   super(new ArrayList<>());
}

现在,在反编译的代码中,constructlist()构造函数没有任何参数,我看到调用它时传入了null,这在我看来像是一个错误,但我不确定这是否是我的异常的原因,我也无法通过internet找到任何东西,这就是我来这里的原因。

另外,我给出的反编译代码是由我的IDE使用其导出功能创建的。我想看看构造函数中的null参数是否是问题所在,但我不知道如何以不同的方式编译代码来反映这一点。如果有人知道我如何更改导出的代码,请通知我。

不管怎样,我想知道的是这个异常是由我的代码的哪一部分引起的,以及如何修复它。

共有1个答案

元景天
2023-03-14

原来您是用Java9编译的,它利用了JDK新的模块系统。也许有一种有效的方法可以通过实现模块来解决您的问题,但是另一种解决方案是简单地使用Java8进行编译!

 类似资料:
  • 我正在使用nashorn引擎,我正在尝试扩展以下java类 Javascript代码:在init()方法中,我想访问超类成员(直接设置受保护字段的值或使用公共setter) 在java中,我创建对象实例并调用init方法,但字段“name”为空。 我还尝试使用Java.super(扩展). setName("name");但这抛出了一个异常

  • 问题内容: 我正在处理,并且想将a另存为查询。这甚至有可能吗?无论如何,这是我的查询: 它确实可以在AnySQL Maestro中工作,但是不能在Access中工作。 问题答案: Access数据库引擎确实支持CHECK约束,但是不能从Access中的查询设计器中执行创建约束的DDL。必须使用VBA代码和ADO连接创建它们,如下所示:

  • 我看到了“krbeexception:Checksum failed”异常。看起来像是kerberos问题,但我无法解决。 任何关于如何解决问题的建议都会很好!提前谢谢。 机器细节: 没有可用的LSB模块。发行商ID:Ubuntu说明:Ubuntu 12.04.4 LTS发行版:12.04 java版本“1.7.0_55”OpenJDK运行时环境(IcedTea 2.4.7)(7u55-2.4.7

  • 问题内容: 众所周知,私有字段不会在类之间继承。令我着迷的是它如何用于内部静态类。考虑以下代码: 您能否解释一下如何访问其他内部类的私有字段?如果合法,为什么只能通过“ super.XXX”构造实现? 问题答案: 内部类是Java的较晚入门。添加它们时,它们仅作为编译器扩展添加,对JVM不变。 语言规范指出,内部类被允许访问在其内声明的类的私有成员。包括其他内部类。 为了使其工作,编译器会生成桥接

  • 我的子类是,我需要在我的超类中使用字段和。我知道如何在子类中使用超类变量,但我必须学会如何做相反的事情?谢谢。

  • 也许有人能帮我解决这个问题。我已经用py魅力集成的这个静态类型检查器挣扎了很长时间。 一些规格: Python 3.7.7 Windows 10 Pro x64 我尝试了以下PyCharm版本。 专业2020.1.3 社区2020.2.3 我试图说明问题。你可以复制 PyCharm屏幕截图 如果您查看这一行,您会注意到没有显示错误。 如果我们使用setter方法来赋值,那么pycharm就可以正确