Two java files. Getting IllegalAccessError when running class with main method trying to access a method from the other file

时光总嘲笑我的痴心妄想 提交于 2019-12-20 06:19:08

问题


Learning Java. I have two files, each containing one java class. When I run the file with the main method, I get the following error:

Exception in thread "main" java.lang.IllegalAccessError: failed to access class TapeDeck from class TapeDeckTestDrive (TapeDeck is in unnamed module of loader 'app'; TapeDeckTestDrive is in unnamed module of loader com.sun.tools.javac.launcher.Main$MemoryClassLoader @18bf3d14) at TapeDeckTestDrive.main(TapeDeckTestDrive.java:3)

class TapeDeckTestDrive{
  public static void main(String[] args){
    TapeDeck t = new TapeDeck();
    t.canRecord = true;
    t.playTape();

    if (t.canRecord == true) {
        t.recordTape();
    }
  }
}
class TapeDeck {
  boolean canRecord = false;
  void playTape(){

    System.out.println("tape playing");
  }
  void recordTape(){

    System.out.println("tape recording");
  }
}

Any help please?


回答1:


Make sure each class is in the same folder, since the error is saying TapeDeckTestDrive can not find TapeDeck. I would recommend starting out with an IDE like Eclipse since it will help you focus more on coding and less with folder problems.

I know your code is all good (in java 8 at least) since when I copied it in eclipse it works no problem, meaning it has to be a folder problem, a problem with the installed version of java, or the way you are running the code is not working for some reason. If both files are in the exact same folder then I would make sure your java version says 1.8 something in the system files (Program Files(x86) most likely in windows), if it does not say that version then it could be another problem with the code and syntax for that version. Another thing that might help is to put public behind the "class" on the first line of each class and make the Boolean public. This might be a syntax requirement on other versions of java or something that is needed when running off command prompt.




回答2:


Quick possible fix, try making the classes and methods "Public".

Under normal circumstances this shouldn't be necessary but you may be hitting a specific case where it might be (It's an edge case so I don't know if it's a problem or not off the top of my head):

Java is really uncomfortable with stuff being in the "Default" package--code from other packages can't access objects in the default package (Meaning no package statement). Although this shouldn't cause problems in your case, maybe your "package" level security settings are also not working in the default package.

If this is actually the problem, the two fixes would be to make the packages and methods public (as I said above) or move both classes into a package.



来源:https://stackoverflow.com/questions/55795983/two-java-files-getting-illegalaccesserror-when-running-class-with-main-method-t

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!