2010-09-06 93 views
4

我有两个方案 一个在目录/ home /红帽/文档/ java1/J1类路径规范

Demo1.java

package j1; 
public class Demo1 
{ 
     public void print() 
     { 
       System.out.println("hi"); 
     } 
} 

和其他在目录/ home /红帽/文档/ java1/J

Demo2.java

import j1.*; 
public class Demo2 
{ 
     Demo2() 
     { 
       Demo1 d=new Demo1(); 
     } 
} 

当我说

javac -classpath /home/redhat/Documents/java1/j1 Demo2.java 

我得到以下错误

Demo2.java:2: package j1 does not exist 
import j1.*; 
^ 
Demo2.java:7: cannot access Demo1 
bad class file: /home/redhat/Documents/java1/j1/Demo1.java 
file does not contain class Demo1 
Please remove or make sure it appears in the correct subdirectory of the classpath. 
       Demo1 d=new Demo1(); 
       ^
2 errors 

我想访问demo1的实例在DEMO2 请帮助。

回答

4

CLASSPATH中是错误的。您应该指向根任何声明包的:

javac -classpath /home/redhat/Documents/java1 Demo2.java 

其他前面的步骤,我怀念的是demo1的类的编译。 javac编译器会寻找“.class”文件,而不是“的.java”的。因此,在执行之前,您需要:

javac Demo1.java 

作为改进我建议你,你宣布你的第二类中包“J”,而不是默认的包,因为它是不是有内部根源路径是个好主意另一个已经包含软件包的根路径。

+0

我不想把它放在同一个目录 – elle 2010-09-06 07:00:05

+0

谢谢。我知道了。 – elle 2010-09-06 07:07:49

0

在javac的可执行文件的命令行指定的类路径选项用于定义the user classpath location编译器在其中可能发现的类型的编译后的类文件。换句话说,编译器需要在用户类路径中编译.class文件。

在你的情况,你有一个源类文件,在这种情况下,你应该使用javac的源路径选项:

javac -sourcepath /home/redhat/Documents/java1 Demo2.java 

的javac将定位用户类路径下的J1包,从而解决型。