Java错误-错误的源文件:文件不包含类x。请删除或确保它出现
最近开始学习Java准备考试 在学习软件包时,尝试此操作并收到错误消息。我所做的是Java错误-错误的源文件:文件不包含类x。请删除或确保它出现,java,import,package,Java,Import,Package,最近开始学习Java准备考试 在学习软件包时,尝试此操作并收到错误消息。我所做的是 //创建类A(在包中:com.test.helpers) 包com.test.helpers; 公共A类{ 公共空间{ System.out.println(“你好世界”); } } //然后使用类A的类应用程序 导入com.test.helpers.*; 公共类应用程序{ 公共静态void main(字符串参数[]){ A=新的A(); a、 你好; } } 我把这两个文件都放在一个名为“JavaTe
//创建类A(在包中:com.test.helpers)
包com.test.helpers;
公共A类{
公共空间{
System.out.println(“你好世界”);
}
}
//然后使用类A的类应用程序
导入com.test.helpers.*;
公共类应用程序{
公共静态void main(字符串参数[]){
A=新的A();
a、 你好;
}
}
我把这两个文件都放在一个名为“JavaTest”的目录中(在Windows7上), 首先使用命令
javac-d编译A.java。A.java
然后,在尝试编译App.java时,我收到了以下错误消息:
但问题似乎有两种解决方式,
import com.test.helpers.*更改导入语句代码>到
在文件“App.java”中导入com.test.helpers.A
非常感谢文件A.java应该位于JavaTest\com\test\helpers\A.java路径中 别忘了像这样编译它:
javac-d。com\test\helpers\A.java将JavaTest文件夹下的A.java移动到com/test/helpers。您看到的错误是编译器抱怨A.java位于与其包声明不匹配的文件夹中。请记住,如果包中没有存在,则无法从应用访问 从src driectory下运行以下命令编译类
src> javac ./*.java ./com/test/helpers/*.java
然后从src文件夹下
src>java App
那应该可以运行你的程序。我最后遇到了同样的问题 我被解决了
//Use like this
import com.test.helpers.A;
如果在com.test.helpers中有多于类,则可以使用导入com.test.helpers.*一切就绪,java不会要求将A.java文件放在helpers文件夹中 代码在运行时删除了A.java文件而不是其他文件的全部原因是: 当您的app.java(或导入其中其他类的主java文件,-->)位于默认包中时,在导入类时,它会优先考虑相同的目录,而不是包目录(如果存在任何与类文件->同名的文件,这就是为什么它给出错误的源文件A.java->作为它想要的A.class) 正因为如此,java中有一条规则:永远不要将一个.java文件(同名)与包并行放置 因此,要解决这个问题,您必须删除文件A.java 或者将其重命名(为包中不存在的任何其他名称)
或者您可以使用完全限定的导入语句Hi。这里的问题是,由于目录中的类文件名(
JavaTest
以及com.test.helpers
目录)不明确,JVM会混淆类文件
当您执行javac-d.A.java
时,编译器在目录com.test.helpers
中生成一个类文件,现在它将其与JavaTest
中的源文件混淆
删除源文件A.java
JavaTest
中删除源文件A.java
时,JVM现在知道要使用com.test….
中的类文件,模糊性就消失了
将文件App.java中的import语句从“import com.test.helpers.*;”更改为“import com.test.helpers.A”。
com.test…
中的文件A.java
,而不是JavaTest
包中的文件
现在,这种模糊性的解决方案对您来说不再是一个问题,您必须使用import语句导入特定文件,即import com.test.helpers.a;
或者如果您想执行import com.test.helpers.*;
则必须在cur中的任何地方使用com.test.helpers.a
租用类实现告诉编译器不要将其与JavaTest
我知道现在回答这个问题已经很晚了,但我想与即将到来的读者分享我的观点,如果它能在任何方面帮助他们,那就太好了。
谢谢!类应用程序在默认包中,对吗?是的,我相信是这样。目录结构是这样的(在编译了A.java之后)Desktop>JavaTest-com>test>helpers>A.class-A.java-App.java感谢您花时间来创建一个loook.emmh,我看不到目录结构,但是类A应该在路径JavaTest\com\test\helpers\A.java中,是吗?抱歉,第一条注释没有清楚地显示类结构。源文件(A.java和App.java)在一个名为“JavaTest”的文件夹中.Java编译后,它的类文件出现在JavaTest>com>test>helpers中。当尝试编译App.Java时,会出现错误。如果删除了A.Java,或者App.Java中的import语句发生了更改,则可以使用显式类名替换星号,即A.Btw,谢谢您花时间查看。顺便说一句,如果您愿意的话,这是该项目的下载链接:谢谢。谢谢,效果很好。你知道为什么当App.java中的import语句从
code
import com.test.helpers.*;code
更改为code
import com.test.helpers.A;code
时,错误从未出现吗?老实说,我不知道,但是我的g因为它与类加载器的内部结构有关
//Use like this
import com.test.helpers.A;