无法从用户定义的包中导入课程

问题描述:

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); 

      } 
    } 

在这里,我创建了两个包pkg1pkg2。在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的全部定义将被写入错误。请帮忙。

+0

你在做什么时会出现这个错误?尽可能精确。并发布文件夹/文件结构。 –

+0

你是什么意思?我测试了上面的代码,它编译并成功执行。 –

+0

我想象一下,当试图从'src/pkg2'中编译程序时,OP会收到错误。如果是这样,请尝试从'src'编译或指定'..'作为源路径。 – Turing85

最有可能你有一个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中,在类加载或我现在可以想到的任何其他上下文中没有排序/优先级问题。