私はこのようなルートディレクトリを持っています:
├── 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でコンパイルするとなぜ機能しないのですか?
最初に、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
を実行します。
行を削除してみてくださいimport vehicles.*;
from BicycleMain.Java
およびそれらはコマンドラインでjavacを使用してコンパイルします。
ちなみに、javacでコンパイルしている間は、フォルダーvehicles
にいて、ステートメントimport vehicles.*;
in BicycleMain.Java
これは、コンパイラにとって、vehicles
フォルダー内に別のフォルダーvehicles
があることを意味します。
最初からパッケージ行を削除するだけで、100%動作します。
端末を介してファイルが保存されているフォルダーに移動し、javac * .Javaと入力します
クラスをインポートする必要もありません。
「src」からコンパイルして、この問題を解決しました。
このようなもの: javac ./my_folder/my_file.Java
敬具