8

メインディレクトリ (main.java を含む) とサブディレクトリ (child.java を含む) があります。

私の問題は、main.java で child.java をインスタンス化する方法です。

  1. 子クラスを公開しました。&行#1を次のように追加しましたpackage mypackage
  2. 新しい mypackage ディレクトリを作成するコンパイルchild.classを行いました。javac -d . child.java
  3. 次のように子クラスをメインにインポートしようとしました: import subdirectory.mypackage.*(注 -d オプションは、child.class を mypackage フォルダー内に配置します)
  4. 「javac main.java」でmain.javaファイルをコンパイルしました

次のエラーが表示されます。

mainAESE.java:9: cannot access subdirectory.child
bad class file: RegularFileObject[./subdirectory/child
class file contains wrong class: mypackage.child
Please remove or make sure it appears in the correct subdirectory of the class
child childInstance= new child();
^
1 error

私を助けてください!!

4

3 に答える 3

5

パッケージ フォルダーが親フォルダーmypackageを共有していることを確認してください。Main.class

package mypackage;
public class Child {}

Main クラスはdefaultパッケージで作成されていると思います。

public class Main {
   public static void main(String []args){
         mypackage.Child child=new mypackage.Child();
   }
}

ディレクトリ構造は次のようになります。

main-directory/
              |
              |----/mypackage/
                            Child.class
              |
              | Main.class
              | Main.java
              | Child.java

Mainそして、次のコマンドで問題を起動/ロードするには、

javaメイン

于 2012-12-06T07:06:42.143 に答える
3

次のファイルがあります。

main.java mypackage/child.java

main.java の最初の行は次のようになります。

import mypackage.child;

main.java があるディレクトリから実行します。

javac mypackage/child.java

その後:

javac main.java

mypackage には child.java と child.class が含まれている必要があります

java main は、mypackage というサブディレクトリで子を探すため、機能するはずです。

于 2012-12-06T06:59:46.100 に答える
3

2 つのことを行う必要があります。

  1. 現在のインポートを次のものに置き換えますimport mypackage.child

    インポートは、インポートするクラスの完全修飾名を反映する必要があります。マシン上のクラス ファイルの場所とは関係ありません。import mypackage.*個別に必要なものを指定する代わりに、パッケージからすべてのクラスをインポートすることもできmypackageます...それは単なるコーディングスタイルの選択です。

  2. subdirectoryクラスパスに追加

    一方、クラスパスは、マシン上のクラス ファイルの場所と関係があります名前が示すように、プログラムが使用するクラスを JVM が検索する必要があるすべての場所へのパスが一覧表示されます。または、オラクルが言うように、「クラスパスは、サードパーティおよびユーザー定義のクラスを見つける場所をJDKツールとアプリケーションに伝えます。」Java に付属の特別なクラス ( など) を見つける場所を Java に指示する必要はありませんString

    #2 の手順は、プログラムの実行方法 (コマンド ラインまたは Eclipse などから) によって異なります。-classpathコマンドラインを使用しているため(コメントごと)、次のようにフラグまたはその省略形を使用する必要があります-cpjava -cp ./subdirectory main

于 2012-12-06T06:51:35.820 に答える