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?
Ответы
Ответ 1
Во-первых, Чтобы скомпилировать исходный файл java с помощью javac
, вам необходимо явно указать файлы для компиляции.
Пример:
javac PathToSourceFile/FileName.java
вам не нужно указывать path
, если исходный файл находится в текущем рабочем каталоге.
Во-вторых, всякий раз, когда java сталкивается с import abc.xyz.ClassName;
, он пытается разрешить abc/xyz/ClassName
по отношению к classpath
или текущему рабочему каталогу.
Итак, если вы находитесь в папке с транспортными средствами и скомпилируете свой код, он не будет компилироваться, потому что он будет искать папки в автомобилях папок (которых не существует!).
но вы можете сделать это, когда внутри папки автомобиля
javac -cp ../ BicycleMain.java
и он должен скомпилироваться, потому что путь к классам будет установлен в каталог (../
), содержащий транспортные средства. который разрешит ваш класс Bicycle
.
а затем используйте
java -cp ../ vehicles/BicycleMain
для запуска.
Ответ 2
Попробуйте удалить строку import vehicles.*;
из BicycleMain.java
и их компиляцию с помощью javac в командной строке.
Кстати, это происходит потому, что во время компиляции в javac вы находитесь в папке vehicles
, и вы пишете оператор import vehicles.*;
в BicycleMain.java
, что означает, что в компиляторе есть еще одна папка vehicles
внутри vehicles
, что здесь не так.
Ответ 3
Просто удалите линию пакета с начала, и она будет работать на 100%.
Перейдите в папку, в которой файлы хранятся через терминал и
type javac *.java
Не нужно также импортировать классы.
Ответ 4
Я решил эту проблему, компилируя из "src".
Что-то вроде этого: javac ./my_folder/my_file.java
С уважением