2011-02-07 64 views
1

我写了下面的代码:进口包名*不工作

​​

然后我用下面的命令来编译:

javac -d . test.java 

它工作正常,但是当我试图导入类“测试”使用“进口abc.def *”它不会导入测试类,代码:生成

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

您需要将javac指向类文件(test.class,无论在哪里生成)。 – justkt 2011-02-07 18:02:56

+0

你可以提供我在这种情况下的javac的确切语法 – imran 2011-02-07 18:31:57

回答

1

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

您也可以指向编译后的Test.class文件,-cp标志

例子:

的javac -cp测试checktest

+0

目录abc/def已经包含test.class,进一步我复制test.java在同一个文件夹中,但问题没有解决。 – imran 2011-02-07 18:15:06

-1

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

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

现在假设你的类路径是/ home /名/班,然后使用$ javac -d /home/name/classes test.java

现在把这个代码

import abc.def.*; 

public class checktest { 

public static void main(String a[]) { 

test t = new test(); 

} 

} 

文件夹

+0

当我写“导入abc.def.test”它工作正常,只有“导入abc.def。*”创建问题。 – imran 2011-02-07 18:29:47

1

你的目录内编译

package abc.def; 

public class test { 

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

} 

结构应如下所示:

  • 当前工作目录
    • checktest.java
    • ABC
      • 高清
        • 测试。java的

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

javac checktest.java 

这会自动查找(和编译)test.java了。如果你只想编译测试,做这种方式:

javac abc/def/test.java 

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

1

我也有同样的问题。

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

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

它会工作。

谢谢。 Britto

0

你似乎错误地将test.java编译到了最上面的目录本身,因此JVM从最上面的目录和abc \ def \ test.class中选取test.class,因此冲突正在发生。

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