我写了以下代码:
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
答案 0 :(得分:1)
您是否制作了正确的目录结构?如果这是你想要的包名,你需要在abc / def中有test.java文件。
您还可以使用-cp标志
指向已编译的test.class文件示例:
javac -cp test checktest
答案 1 :(得分:1)
您的目录结构应如下所示:
然后,从顶部的目录中,您可以编译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();
}
}
在文件夹
中