web-dev-qa-db-ja.com

Javac「シンボルが見つかりません」

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

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

Bicycle.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をコンパイルして成功しましたが、BicycleMain.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とIT WORKSでこれらのファイルを実行しようとしました!しかし、CLIでコンパイルするとなぜ機能しないのですか?

16
andrian

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

例:

javac PathToSourceFile/FileName.Java

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

2番目に、Javaがimport abc.xyz.ClassName;に遭遇すると、classpathまたは現在の作業ディレクトリに関してabc/xyz/ClassNameを解決しようとします。

したがって、ビークルフォルダー内にいてコードをコンパイルすると、フォルダービークル内のフォルダービークルを探すため、コンパイルされません(存在しません!)。

しかし、あなたは車両フォルダ内にいるときにこれを行うことができます

javac -cp ../ BicycleMain.Java

クラスパスは車両を含むディレクトリ(../)に設定されるため、コンパイルする必要があります。 Bicycleクラスを解決します。

そして使用する

Java -cp ../ vehicles/BicycleMainを実行します。

22
Sushant Kr

行を削除してみてくださいimport vehicles.*; from BicycleMain.Javaおよびそれらはコマンドラインでjavacを使用してコンパイルします。

ちなみに、javacでコンパイルしている間は、フォルダーvehiclesにいて、ステートメントimport vehicles.*; in BicycleMain.Javaこれは、コンパイラにとって、vehiclesフォルダー内に別のフォルダーvehiclesがあることを意味します。

8
Extreme Coders

最初からパッケージ行を削除するだけで、100%動作します。

端末を介してファイルが保存されているフォルダーに移動し、javac * .Javaと入力します

クラスをインポートする必要もありません。

0
Praveen Rana

「src」からコンパイルして、この問題を解決しました。

このようなもの: javac ./my_folder/my_file.Java

敬具

0
Antonio Blanco