【问题标题】:Java.Lang.IllegalAccessError on all programs after upgrading to a new computer升级到新计算机后所有程序出现 Java.Lang.IllegalAccessError
【发布时间】:2019-12-17 11:22:00
【问题描述】:

我昨天买了一台新电脑 (Dell XPS 13)。我刚刚安装了 JDK 并将我所有的旧 Java 项目复制到我的新设备上,但是当我尝试运行这些程序中的任何一个时,我都会遇到非法访问错误。

编辑:注意:升级之前我使用的是 jdk1.8.0_151。我现在正在使用 jdk-12.0.2。

我已尝试重新编译某些项目中的所有类,但这无济于事。请注意,非法访问错误仅在运行时发生。我看过其他关于非法访问错误的 stackoverflow 帖子,但他们的解决方案都不适合我。

    Exception in thread "main" java.lang.IllegalAccessError: failed to access class Tree from class BinTree (Tree is in unnamed module of loader 'app'; BinTree is in unnamed module of loader com.sun.tools.javac.launcher.Main$MemoryClassLoader @48a242ce)
    at BinTree.main(BinTree.Java:12)

编辑:该项目的项目层次结构是:

    BinTree:
        Tree:
            Node

编辑:这是项目的主类:

    import java.util.Scanner;
    import java.util.ArrayList;
    class BinTree {
        public static void main(String[] args) {
            //Create randomized values for a new tree 
            ArrayList<Double> toSort = new ArrayList<Double>();
            for (int i = 1; i <= 1300; i++) {
                double rand = 1 + ((int)(Math.random()*100000));
                toSort.add(rand);
            }
            //Create tree
            Tree binTree = new Tree(toSort);
            binTree.getGreatestNode();
            binTree.sort();
        }
    }

【问题讨论】:

  • 升级前您的项目是否使用 Java 9?
  • 可以分享一下你的主类代码吗?
  • 你能发布你的项目的包层次结构吗?一旦您可以在项目中创建module-info.java,这应该很容易解决。
  • @JacobG。是的。为了简单起见,我将发布一个具有更少类的更简单项目的层次结构。我还将错误消息切换到更简单项目的错误消息。
  • @M.Prokhorov 在升级之前我使用的是 jdk 1.8.0_151。我现在正在使用 jdk-12.0.2。

标签: java illegalaccessexception


【解决方案1】:

尝试一次编译您项目的所有.java 源文件。如果BinTreeTreeNode 这三个文件都在同一个目录中,那么您可以使用 cmd/terminal 轻松进入该目录并写入:

javac *.java

它应该一次编译该目录下的所有java文件。

【讨论】:

  • 它们都在同一个目录下。我跑了“javac *.java”。全部编译成功。但是我仍然遇到同样的非法访问错误。
  • 可能是使用了一些不再支持的反射调用的测试库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多