2011-02-07 4 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

+0

この場合、javacの正確な構文を私に教えてください。 – imran

答えて

1

適切なディレクトリ構造を作成しましたか?あなたが望むパッケージ名であれば、abc/defにtest.javaファイルが必要です。

あなたはまた、-cpフラグを指定してコンパイルtest.classファイルを指すことができ

例:

のjavac checktest

+0

ディレクトリabc/defにはすでにtest.classが含まれています。さらに同じフォルダにtest.javaをコピーしましたが、問題は解決しません。 – imran

-1

が最初にこのを知っている-cpテスト - 使用します他のプログラムのパッケージを使用し、通常どおり.javaファイルをコンパイルし、結果の.classファイルをCLASSPATH環境変数で参照されているディレクトリの適切なサブディレクトリに移動します。

たとえば、/ home/name/classesがCLASSPATHにあり、パッケージの名前がpackage1の場合は、/ home/name/classesにpackage1というディレクトリを作成し、すべての.classファイルをパッケージに入れます/ home/name/classes/package1にあります。

今すぐフォルダ

+0

"import abc.def.test"と書くとうまく動作しますが、 "import abc.def。*"だけが問題を作成します。 – imran

1

あなたのディレクトリ内

import abc.def.*; 

public class checktest { 

public static void main(String a[]) { 

test t = new test(); 

} 

} 

このコードを入れ、その後$ javac -d /home/name/classes test.java

を使用して

package abc.def; 

public class test { 

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

} 

をコンパイルクラスパスは/ home /名前/クラスを想定構造は次のようになります:

  • 現在の作業ディレクトリ
    • checktest.java
    • ABC
      • デフ
        • テスト。

          javac checktest.java 
          

          これは、自動的に検索します(およびコンパイル)あまりにもtest.java:次に

javaのは、一番上のディレクトリから、あなたはchecktestをコンパイルすることができます。テストだけをコンパイルする場合は、次のようにします。

javac abc/def/test.java 

すべてのクラスファイルも正しいディレクトリにあります。

+0

ディレクトリ構造は指定どおり正しいです。私は "test.java"がd:\ javaprograms \ abc \ def \ test.javaにあり、 "checktest.java"が "d:\ javaprograms"にあるので、classpath変数が正しく設定されていないと思います。 "および" d:\ javaprograms "は現在のディレクトリです – imran

+0

" import abc.def.test "は正しく動作していますが、" import abc.def。* "は機能しません。 – imran

+0

CLASSPATH変数をまったく設定しないでください。それが無視されていることを確認するには、 'javac -cpを使います。 checktest.java' –

1

私も同じ問題がありました。

追加のクラスパスは設定する必要はありません。

ご使用のシナリオに応じて、作業ディレクトリにはtest.javaファイルが含まれている可能性があります。 test.javaファイルを作業ディレクトリから削除し、javac checktest.javaを使用してコンパイルするだけです。

それが動作します。

ありがとうございました。 Britto

0

コンパイルされたtest.javaが最上位のディレクトリ自体にあると思われるので、JVMはtest.classを最上位のディレクトリからabc \ def \ test.classから選択します。したがって、競合が発生しています。

一番上のディレクトリにls test *と入力して、この場合に該当するかどうかを確認し、この追加のtest.classを削除してから再コンパイルしてください。

関連する問題