【问题标题】:import packagename.* not working导入包名。*不工作
【发布时间】:2011-02-07 17:56:56
【问题描述】:

我写了以下代码:

package abc.def;

public class test {

public void test() {}
public void disp() {
 System.out.println("in disp");
}

}

然后我使用以下命令进行编译:

javac -d . test.java

它工作正常,但是当我尝试使用“import abc.def.*”导入类“test”时,它没有导入测试类,代码是:

import abc.def.*;


public class checktest {

 public static void main(String a[]) {

 test t = new test();

}

}

产生以下错误:

D:\javaprograms>javac  checktest.java
checktest.java:8: cannot access test
bad class file: .\test.java
file does not contain class test
Please remove or make sure it appears in the correct subdirectory of the classpa
th.
 test t = new test();
 ^
1 error

【问题讨论】:

  • 您需要将 javac 指向类文件(test.class,无论它是在哪里生成的)。
  • 你能告诉我在这种情况下 javac 的确切语法吗

标签: java package javac


【解决方案1】:

您是否制定了正确的目录结构?如果这是你想要的包名,你需要在 abc/def 中有 test.java 文件。

你也可以用-cp标志指向编译好的test.class文件

例子:

javac -cp test checktest

【讨论】:

  • 目录 abc/def 已经包含 test.class,我将 test.java 也复制到同一个文件夹中,但问题没有解决。
【解决方案2】:

您的目录结构应如下所示:

  • 当前工作目录
    • checktest.java
    • ABC
      • 定义
        • test.java

然后,从最上面的目录,就可以编译checktest了:

  javac checktest.java

这也会自动找到(并编译)test.java。如果你只想编译测试,这样做:

  javac abc/def/test.java

那么所有的类文件也会在正确的目录中。

【讨论】:

  • 目录结构与指定的一样正确。我认为类路径变量设置不正确,确切的路径应该是什么,因为我的“test.java”在 d:\javaprograms\abc\def\test.java 中,而“checktest.java”在“d:\javaprograms”中" 和 "d:\javaprograms" 是我的当前目录
  • “import abc.def.test”工作正常,但“import abc.def.*”不起作用
  • 您的 CLASSPATH 变量根本不应该设置。如果您想确保它被忽略,请使用javac -cp . checktest.java
  • @imran:我刚试过你的程序(我的答案中列出了目录结构),它编译没有任何问题。也许你的文件系统出了问题?至少,以这种方式编译时,您的输出不应该是问题中的那个。
【解决方案3】:

我也遇到了同样的问题。

不需要设置额外的类路径。

根据您的场景,您的工作目录可能包含 test.java 文件。您可以从工作目录中删除 test.java 文件并使用 javac checktest.java 进行编译。

它会起作用的。

谢谢。 布里托

【讨论】:

    【解决方案4】:

    您似乎错误地在最顶层目录本身编译了 test.java,因此 JVM 正在从最顶层目录以及 abc\def\test.class 中选择 test.class,因此发生了冲突。

    请在最顶部的目录中输入:ls test* 并确认是否是这种情况,然后删除这个额外的 test.class,然后重新编译。

    【讨论】:

      【解决方案5】:

      首先了解这一点 - 要在其他程序中使用该包,请照常编译 .java 文件,然后将生成的 .class 文件移动到 CLASSPATH 中引用的目录之一的适当子目录中环境变量。

      例如,如果 /home/name/classes 在您的 CLASSPATH 中并且您的包名为 package1,那么您将在 /home/name/classes 中创建一个名为 package1 的目录,然后将包中的所有 .class 文件放入/home/name/classes/package1.

      现在假设你的类路径是 /home/name/classes 然后编译

      package abc.def;
      
      public class test {
      
      public void test() {} public void disp() { System.out.println("in disp"); }
      
      }
      

      使用$ javac -d /home/name/classes test.java

      现在输入这段代码

      import abc.def.*;
      
      public class checktest {
      
      public static void main(String a[]) {
      
      test t = new test();
      
      }
      
      }
      

      文件夹内

      【讨论】:

      • 当我写“import abc.def.test”时它工作正常,只有“import abc.def.*”会产生问题。
      猜你喜欢
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 2018-07-29
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多