Illegalacesserror(Java)

Illegalacesserror(Java),java,debugging,classloader,Java,Debugging,Classloader,我有4个文件,Complex.java、polymonent.java、Newton.java和NewtonFractal.java,其中每个类中都有: Complex设置一个数据类型Complex(),可以将其视为R^2中的一个点,具有实部和虚部 多项式设置由复数项数组初始化的复数项多项式 牛顿,它执行我已经完成的牛顿-拉斐逊算法,我正在主要测试 出于某种原因,我在写作时: 多项式p=新多项式(系数) 式中,系数为复数[]类型。我得到了错误 线程“main”java.lang.IllegalA

我有4个文件,Complex.java、polymonent.java、Newton.java和NewtonFractal.java,其中每个类中都有:

  • Complex设置一个数据类型Complex(),可以将其视为R^2中的一个点,具有实部和虚部

  • 多项式设置由复数项数组初始化的复数项多项式

  • 牛顿,它执行我已经完成的牛顿-拉斐逊算法,我正在主要测试
  • 出于某种原因,我在写作时:

    多项式p=新多项式(系数)

    式中,系数为复数[]类型。我得到了错误

    线程“main”java.lang.IllegalAccessError中出现异常:无法从类Newton访问类多项式(多项式位于加载程序“app”的未命名模块中;Newton位于加载程序com.sun.tools.javac.launcher.main$MemoryClassLoader@473b46c3的未命名模块中) 位于Newton.main(Newton.java:169)

    奇怪的是我没有犯错误

    Complex[]coeff=newcomplex[]{newcomplex(-1.0,0.0),newcomplex(),newcomplex(),(1.0,0.0)}

    因此,复杂类被很好地访问,而不是多项式类。我已经删除了所有以前的类文件,并替换了它们,每个加载程序的位置如下:

  • com.sun.tools.javac.launcher.Main$MemoryClassLoader@58c1c010对于Newton.java
  • com.sun.tools.javac.launcher.Main$MemoryClassLoader@b62fe6d对于polymonery.java
  • com.sun.tools.javac.launcher.Main$MemoryClassLoader@15eb5ee5对于Complex.java
  • 我从运行
    System.out.println(“Insert Class Name.Class.getClassLoader())中得到的main
    中编码>并为每个文件编译。我无法运行
    System.out.println(polymonal.class.getClassLoader())来自Newton或Complex文件,但我可以运行
    System.out.println(Complex.class.getClassLoader())在牛顿给定中:
    jdk.internal.loader.ClassLoaders$AppClassLoader@3d4eac69对于Newton.java。但是我不能在复杂的文件中运行与Newton类相同的代码。此外,我还可以从polynomy.java为Complex.java运行getClassLoader(),得到jdk.internal.loader.ClassLoaders$AppClassLoader@3d4eac69. 但是我不能从Complex.java为polynomy.java的getClassLoader()执行相同的操作:

    线程“main”java.lang.IllegalAccessError中出现异常:无法从多项式类访问Newton类(牛顿位于加载器“app”的未命名模块中;多项式位于加载器com.sun.tools.javac.launcher.main$MemoryClassLoader@b62fe6d的未命名模块中) 在polynomy.main(polynomy.java:135)


    我是新来的,所以我不确定哪些信息最适合分享,所以我尝试提供所有信息,但如果需要其他信息,请毫不犹豫地询问。

    MemoryClassLoader的出现表示您正试图直接分享(例如,
    java Complex.java
    )。但是您提到您有不止一个源文件。然后您需要编译所有源文件,假设“Complex”是您的主类,请使用
    java.package.Complex
    (注意没有.java扩展名)。如果这没有帮助,你能提供一个演示问题的例子吗?相关的@Slaw你的包裹是指什么?对我来说,所有3个文件都位于Documents/University/MA117/Project2中,是吗?它是类的完全限定名的一部分。如果您的
    Complex.java
    源文件有一个
    包com.example声明,然后使用
    javacom.example.Complex
    。如果没有包声明,则源文件位于所谓的默认/未命名包中,您只需使用
    javacomplex
    。另一方面,通常源文件将位于镜像包结构的目录结构中,因此
    com.example.Complex
    类将位于
    /com/example/Complex.java
    文件中。也许,仅声明类
    public
    会有所帮助。。。