2010-09-06 88 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包,從而解決型。