无法从用户定义的包中导入课程
package pkg1;
public class demoFile1 {
private int maze = 5;
public demoFile1() {}
public demoFile1 (int maze) {
this.maze = maze;
System.out.println(this.maze);
}
}
package pkg2;
import pkg1.*;
public class demoFile2 {
public static void main (String[] args) {
demoFile1 obj = new demoFile1 (10);
}
}
在这里,我创建了两个包pkg1
和pkg2
。在pkg1
,还有一类和内pkg2
另一类进口pkg1
到initailize前级,因此需要引入来自pkg1
的.class
,这将产生一个错误试图从这个子目录中调用时:无法从用户定义的包中导入课程
error: package pkg1 does not exist
请注意,程序(pkg2
下不同层次的,没有限制)工作时pkg1.demoFile1.class
文件是由demoFile2.class
从子目录之外的进口就好了,但不是在这两个包都在同一水平上,每个都有源代码文件和.class
fil ES即当pkg2.demoFile2.class
尝试导入pkg1.demoFile1.class
编辑#1:文件夹结构: click here
什么,我觉得是有可能发生了一些问题与分级排序/优先级在创建或导入.class
文件包或OR的全部定义将被写入错误。请帮忙。
最有可能你有一个classpath问题。类文件应放置在与java包声明相匹配的文件夹中。文件夹结构的根目录可能在您的类路径中存在的每个文件夹/ jar中开始(编辑:您的文件夹结构是正确的)。
如果运行
java pkg2.demoFile2
在默认情况下使用“当前目录”的类路径(当前目录被称为“”)。因此demoFile2.class必须位于pkg2.class文件夹内的pkg2文件夹和demoFile1.class中,并且必须从包含文件夹文件夹的文件夹执行java程序。
该文件夹结构通常由java编辑器处理。所以我想你从命令行运行“javac”。在这种情况下,指定输出文件夹,以便它可以创建有所需的文件夹结构:
javac -d . file1.java file2.java
如果你想编译一个文件,你需要告诉javac的在那里可以找到以前编译的类时,再次使用类路径(再次从根文件夹运行此):
javac -d . -cp . file2.java
您可以从任何文件夹做到这一切你想要正确specifiying类路径中(作为绝对或相对路径)。从根文件夹运行所有命令是最简单的选项。
在java中,在类加载或我现在可以想到的任何其他上下文中没有排序/优先级问题。
你在做什么时会出现这个错误?尽可能精确。并发布文件夹/文件结构。 –
你是什么意思?我测试了上面的代码,它编译并成功执行。 –
我想象一下,当试图从'src/pkg2'中编译程序时,OP会收到错误。如果是这样,请尝试从'src'编译或指定'..'作为源路径。 – Turing85