Abd*_*ain 1 java methods compiler-errors
学习Java。我有两个文件,每个文件都包含一个 java 类。当我使用 main 方法运行文件时,出现以下错误:
线程“main”中的异常 java.lang.IllegalAccessError:无法从 TapeDeckTestDrive 类访问 TapeDeck 类(TapeDeck 位于加载器“app”的未命名模块中;TapeDeckTestDrive 位于加载器 com.sun.tools.javac.launcher.Main 的未命名模块中$MemoryClassLoader @18bf3d14) 在 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");
}
}
Run Code Online (Sandbox Code Playgroud)
请问有什么帮助吗?
小智 6
我得到了完全相同的错误*做了一些非常愚蠢的事情:
我尝试将文件作为java {main-class}.java. 就这么简单!
相反,请务必将其简单地作为java {main-class}.
*具体来说,我的错误格式,就像你的一样:
线程“main”中的异常 java.lang.IllegalAccessError: 无法
{pack.other-class}从类访问类{pack.main-class}({pack.other-class}位于加载器“app”的{pack.main-class}未命名模块中;位于加载器 com.sun.tools.javac.launcher.Main$MemoryClassLoader @29f69090 的未命名模块中)??在
{pack.main-class}。{who-cares-where}
??在{pack.main-class}。{who-cares-why}
???????????? ? . . .
如果您只编译{main-class}.
所以代替 javac {directory}/{main-class}.java
一定要同时编译它们,所以交叉引用没有问题:
??javac {directory}/*.java
这只是一个愚蠢的命令行错误。如果它也发生在 IntelliJ 中,正如您所说,这不是您的问题。但是,我希望它至少对遇到此错误问题的其他人有所帮助!
小智 2
确保每个类位于同一文件夹中,因为错误提示 TapeDeckTestDrive 找不到 TapeDeck。我建议从像 Eclipse 这样的 IDE 开始,因为它将帮助您更多地关注编码而不是文件夹问题。
我知道你的代码都很好(至少在java 8中),因为当我在eclipse中复制它时它工作没有问题,这意味着它必须是文件夹问题,安装的java版本的问题,或者你运行的方式该代码由于某种原因无法工作。如果这两个文件位于完全相同的文件夹中,那么我会确保您的java版本在系统文件中显示1.8(程序文件(x86)最有可能在Windows中),如果它没有说该版本那么它可能是另一个问题该版本的代码和语法。另一件可能有帮助的事情是将 public 放在每个类的第一行的“类”后面,并使布尔值公开。这可能是其他版本的 java 的语法要求,或者是运行命令提示符时需要的东西。