javac的“找不到符号”(Javac “cannot find symbol”)

2019-07-04 02:09发布

我有这样的根目录:

├── 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这些文件和它的作品! 但为什么当我在命令行编译它不起作用?

Answer 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运行。



Answer 2:

请尝试删除线import vehicles.*;BicycleMain.java并在命令行编译的javac。

顺便说这是因为,当您在的javac编译你的文件夹中vehicles和你写一份声明中import vehicles.*;BicycleMain.java这意味着对编译器还有另外一个文件夹中vehicles的范围内vehicles的文件夹这是不是这里的情况



Answer 3:

我已经解决了这个问题,从“SRC”编制。

事情是这样的: javac ./my_folder/my_file.java

亲切的问候



Answer 4:

只是删除从开始包装线,它会工作100%。

去其中的文件被经由端子和输入javac *的.java存储在文件夹

将不会有必要导入类了。



文章来源: Javac “cannot find symbol”