【问题标题】:import class file in java [closed]在java中导入类文件[关闭]
【发布时间】:2012-11-24 04:05:57
【问题描述】:

我有一个主目录(包含 main.java)和一个子目录(包含 child.java)。

我的问题是如何在 main.java 中实例化 child.java

  1. 我已公开子类。 & 将第 1 行添加为 package mypackage
  2. 我已经编译了 child.classjavac -d . child.java,这会创建一个新的 mypackage 目录。
  3. 我尝试在 main 中导入子类,如下所示:import subdirectory.mypackage.*(注意 -d 选项将 child.class 放在 mypackage 文件夹中)
  4. 我用“javac main.java”编译了main.java文件

我收到以下错误:

mainAESE.java:9: cannot access subdirectory.child
bad class file: RegularFileObject[./subdirectory/child
class file contains wrong class: mypackage.child
Please remove or make sure it appears in the correct subdirectory of the class
child childInstance= new child();
^
1 error

请帮帮我!!

【问题讨论】:

  • 你好阿布..我试过这个..它说“包不存在”

标签: java import package javac


【解决方案1】:

确保包文件夹mypackageMain.class共享父文件夹。

package mypackage;
public class Child {}

我假设Main 类是在default 包中创建的。

public class Main {
   public static void main(String []args){
         mypackage.Child child=new mypackage.Child();
   }
}

你的目录结构应该是:

main-directory/
              |
              |----/mypackage/
                            Child.class
              |
              | Main.class
              | Main.java
              | Child.java

并启动/加载Main 发出以下命令,

java 主要

【讨论】:

  • 我的文件夹结构没有包文件夹和main.class在同一个文件夹中..正如我所说,包文件夹在子目录中,这种情况下我该怎么办?
【解决方案2】:

您有以下文件:

main.java 我的包/child.java

在main.java中,第一行应该是:

import mypackage.child;

从main.java所在目录运行

javac mypackage/child.java

然后:

javac main.java

mypackage 应该包含 child.java 和 child.class

java main 应该可以工作,因为它会在名为 mypackage 的子目录中查找子目录。

【讨论】:

    【解决方案3】:

    你需要做两件事。

    1. 将您当前的导入替换为import mypackage.child

      导入需要反映您要导入的类的fully qualified name。它与您机器上类文件的位置无关。您也可以使用 import mypackage.* 从包 mypackage 导入所有类,而不是单独指定您想要的类...这只是一种编码风格选择。

    2. subdirectory 添加到您的类路径

      另一方面,类路径确实与你机器上类文件的位置有关。顾名思义,它列出了 JVM 应在其中查找程序使用的类的所有位置的路径。或者,正如 Oracle 所说,"The class path tells JDK tools and applications where to find third-party and user-defined classes." 您无需告诉 Java 在哪里可以找到它附带的特殊类(例如 String)。

      #2 的说明取决于您运行程序的方式(从命令行或 Eclipse 或其他方式)。由于您使用的是命令行(根据您的评论),因此您需要使用 -classpath 标志或其简写形式 -cp,如下所示:java -cp ./subdirectory main

    【讨论】:

    • @Rookie 抱歉,刚刚修正了一个错字。 “孩子”和“班级”在深夜看起来太相似了。
    • 我尝试了您的解决方案,但出现此错误: expected import mypackage.class; ^ 1 个错误
    • 从您的问题中不清楚您的主类实际上是命名为“main”还是“mainAESE”;同样不清楚您的子目录是否实际上称为“子目录”。您可能需要对我的回答进行一些调整以解决此类问题。调整后是否仍出现错误?
    • hello.my 的主类实际上是 mainAESE.java(为了简单起见,我在 SO 中编写了主类).. 我的子目录实际上是 ./aes_wrapper/AESE/,它有 child.java。我尝试了您的答案,并且在使用“cp”添加类路径时遇到了困难..即使在调整后
    • child的包声明是什么?
    猜你喜欢
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 2013-10-23
    • 2015-10-11
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    相关资源
    最近更新 更多