2011-02-07 30 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,然後重新編譯。