Java 错误 - 源文件错误:文件不包含类 x 。请删除或确保它显示

2022-09-03 06:53:58

最近开始学习Java考试。

在学习包时,尝试了此操作并收到错误消息。我所做的是


//Creating class A (Within package the package: com.test.helpers)
    
package com.test.helpers;
public class A {
    public void sayHello(){
        System.out.println("Hello World");
    }
}

//And then the class App utilising the class A
    
import com.test.helpers.*;

public class App{
  public static void main(String args[]){
    A a = new A();
    a.sayHello();
  }
}

我将这两个文件放在一个名为“JavaTest”的目录中(在Windows 7上),并首先使用命令编译A.javajavac -d . A.java

然后,在尝试编译App.java时,我收到以下错误消息:


App.java:5: error: cannot access A
                A a = new A();
                ^
bad source file: .\A.java
  file does not contain class A
  Please remove or make sure it appears in the correct subdirectory of the source path.
1 error

但是,问题似乎以两种方式解决,

  1. 删除源文件 A.java
  2. 在文件中将 import 语句从 更改为 。import com.test.helpers.*;import com.test.helpers.AApp.java

如果您能解释一下这里发生的事情,我将不胜感激。或者我可能犯了一个愚蠢的人为错误或语法错误。

这是源文件的链接


答案 1

嗨,这里的问题是,由于目录(以及目录)中的类文件名,JVM混淆了类文件。ambiguousJavaTestcom.test.helpers

当你做编译器在目录中创建一个类文件,现在它把它与那里的源文件混淆了javac -d . A.javacom.test.helpersJavaTest

  1. Deleting the Source file A.java

当您从 中删除源文件时,JVM 现在知道要使用的类文件,歧义就会消失。A.javaJavaTestcom.test....

  1. Changing the import statement from 'import com.test.helpers.*;' to 'import com.test.helpers.A' in the file, 'App.java'.

在这里,您指定要在类实现中使用的特定文件,即告诉编译器使用来自而不是来自包的文件A.javacom.test...JavaTest

现在,这种歧义的解决方案对您来说永远不会成为问题,您必须使用import语句导入特定文件,即 或者如果你想这样做,那么你必须专门使用代替当前类实现中的所有内容,以告诉编译器不要将其与源代码混淆import com.test.helpers.A;import com.test.helpers.*;com.test.helpers.AAJavaTest

我知道这个特定的答案已经很晚了,但我想为即将到来的读者分享我的观点,如果它能以任何方式帮助他们,那就太好了。谢谢!


答案 2

将文件夹 JavaTest 下的 A.java移动到 com/test/helpers。您看到的错误是编译器抱怨A.java位于与其包声明不匹配的文件夹中。请记住,如果没有 A 在包中,则无法从应用访问 A。

从 src driectory 运行以下命令来编译你的类

src> javac ./*.java ./com/test/helpers/*.java

然后从 src 文件夹下

src>java App

这应该运行你的程序。