24

私はこのようなルートディレクトリを持っています:

├── classes
└── src
    └── vehicles
        ├── Bicycle.java
        └── BicycleMain.java

自転車.java

package vehicles;

public class Bicycle {

  public int cadence;
  public int gear;
  public int speed;

  public Bicycle(int startCadence, int startSpeed, int startGear) {
    gear = startGear;
    cadence = startCadence;
    speed = startSpeed;
  }

  public void setCadence(int newValue) {
      cadence = newValue;
  }
  public void setGear(int newValue) {
    gear = newValue;
  }
  public void setSpeed(int newValue) {
    speed = newValue;
  }
  public int getGear() {
    return gear;
  }
  public int getCadence() {
    return cadence;
  }
  public int getSpeed() {
    return speed;
  }
  public void applyBrake(int decrement) {
    speed -= decrement;
  }
  public void speedUp(int increment) {
    speed += increment;
  }

BicycleMain.java

package vehicles; import vehicles.*;

public class BicycleMain {
        public static void main (String args[]){
        Bicycle Bike = new Bicycle(10, 20, 1);
        System.out.println("We have a new bicycle with speed = " +Bike.getSpeed()+", cadence = "+Bike.getCadence()+", gear = "+Bike.getGear());
        } }

私は Bicycle.java をコンパイルして成功しましたが、 Bic​​ycleMain.java はコンパイルしませんでした:

symbol  : class Bicycle
location: class vehicles.BicycleMain
    Bicycle Bike = new Bicycle(10, 20, 1);
    ^
src/vehicles/BicycleMain.java:6: cannot find symbol
symbol  : class Bicycle
location: class vehicles.BicycleMain
    Bicycle Bike = new Bicycle(10, 20, 1);
                       ^
2 errors

これらのファイルを Netbeans で実行しようとすると、うまくいきます! しかし、CLI でコンパイルすると機能しないのはなぜですか?

4

5 に答える 5

33

まず、 を使用して Java ソース ファイルをコンパイルするには、javacコンパイルするファイルを明示的に指定する必要があります。

例:

javac PathToSourceFile/FileName.java

pathソース ファイルが現在の作業ディレクトリにある場合は、を指定する必要はありません。

次に、java が遭遇するたびに、または現在の作業ディレクトリに関してimport abc.xyz.ClassName;解決しようとします。abc/xyz/ClassNameclasspath

したがって、vehicles フォルダー内でコードをコンパイルすると、フォルダー vehicle (存在しない!) 内のフォルダー vehicle が検索されるため、コンパイルされません。

ただし、車両フォルダー内でこれを行うことができます

javac -cp ../ BicycleMain.java

classpath が../車両を含む directory( ) に設定されるため、コンパイルする必要があります。Bicycleあなたのクラスを解決します。

そして使用する

java -cp ../ vehicles/BicycleMain走る。

于 2012-11-24T10:12:22.220 に答える
9

import vehicles.*;から行を削除してBicycleMain.java、コマンドラインで javac を使用してコンパイルしてみてください。

ちなみに、javacでコンパイルしているときにフォルダーにいて、コンパイラーに別のフォルダーがあることを意味するステートメントvehiclesを書き込むためimport vehicles.*;に発生しますが、ここではそうではありませんBicycleMain.javavehiclesvehicles

于 2012-11-24T02:33:40.783 に答える