【问题标题】:unable to import class from user-defined package无法从用户定义的包中导入类
【发布时间】:2017-05-14 11:08:38
【问题描述】:
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来初始化前一个类,因此它需要从pkg1导入.class,这会在尝试调用时产生错误在这个子目录中:

error: package pkg1 does not exist

请注意,当demoFile2.class 从该子目录外部(不同级别,没有限制在pkg2 下)导入pkg1.demoFile1.class 文件时,程序运行良好,但是当这两个包都在同一级别,每个都有源代码文件和.class 文件,即当pkg2.demoFile2.class 尝试导入pkg1.demoFile1.class

Edit#1:文件夹结构: click here

我的感觉是,在从包中创建或导入 .class 文件时,分层排序/优先级可能存在一些问题,或者整体定义写错了。请帮忙。

【问题讨论】:

  • 你在做什么的时候得到那个错误?尽可能精确。并发布文件夹/文件结构。
  • 我已经创建了您解释的相同场景。它工作正常。你是用 eclipse 还是其他工具来编码。![enter image description here](i.stack.imgur.com/q05IB.png)
  • 什么意思?我测试了上面的代码,编译执行成功。
  • 我想 OP 在尝试从 src/pkg2 中编译程序时会出现错误。如果是这样,请尝试从src 编译或指定.. 作为源路径。
  • 上传了文件夹结构,不知道为什么他们嵌入链接而不是实际图像

标签: java packages java-package


【解决方案1】:

您很可能遇到classpath 问题。类文件应放置在与 java 包声明匹配的文件夹中。文件夹结构的根可能从您的类路径中存在的每个文件夹/ja​​r 开始(编辑:您的文件夹结构是正确的)。

如果你跑了

java pkg2.demoFile2

默认使用“当前目录”类路径(当前目录称为“.”)。所以 demoFile2.class 必须在 pkg2 文件夹内,demoFile1.class 在 pkg2.class 文件夹内你必须从包含这两个包文件夹的文件夹中执行 java 程序

此文件夹结构通常由 java 编辑器处理。所以我想你正在从命令行运行“javac”。在这种情况下,指定一个输出文件夹,以便它可以在那里创建所需的文件夹结构:

javac -d . file1.java file2.java

如果你想一次编译一个文件,你需要告诉 javac 在哪里可以找到以前编译的类,再次使用类路径(再次从根文件夹运行):

javac -d . -cp . file2.java

您可以从您希望正确指定类路径(作为绝对或相对路径)的任何文件夹中执行所有这些操作。从根文件夹运行所有命令是最简单的选择。

在 java 中,类加载或我现在能想到的任何其他上下文中都没有排序/优先级问题。

【讨论】:

    猜你喜欢
    • 2013-08-04
    • 1970-01-01
    • 2023-01-31
    • 2021-10-16
    • 1970-01-01
    • 2021-11-25
    • 2021-08-30
    • 2018-09-25
    • 1970-01-01
    相关资源
    最近更新 更多