import packagename。*无效

时间:2011-02-07 17:56:56

标签: java package javac

我写了以下代码:

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

5 个答案:

答案 0 :(得分:1)

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

您还可以使用-cp标志

指向已编译的test.class文件

示例:

  

javac -cp test checktest

答案 1 :(得分:1)

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

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

然后,从顶部的目录中,您可以编译checktest:

  javac checktest.java

这也将自动查找(并编译)test.java。如果您只想编译测试,请按以下方式进行:

  javac abc/def/test.java

然后所有类文件也将在正确的目录中。

答案 2 :(得分:1)

我也有同样的问题。

无需设置其他类路径。

根据您的方案,您的工作目录可能包含test.java文件。您只需从工作目录中删除test.java文件,然后使用javac checktest.java进行编译。

它会起作用。

感谢。 BRITTO

答案 3 :(得分:0)

似乎你错误地在最顶层的目录中编译了test.java,因此JVM从最顶层的目录和abc \ def \ test.class中选择了test.class,因此发生了冲突。

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

答案 4 :(得分:-1)

首先知道这个 - 要在其他程序中使用该包,请像往常一样编译.java文件,然后将生成的.class文件移动到CLASSPATH中引用的某个目录的相应子目录中环境变量。

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

现在假设你的类路径是/ 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();

}

}

在文件夹