Javac"找不到符号"

and*_*ian 16 java compilation javac command-line-interface

我有这样的根目录:

??? classes
??? src
    ??? vehicles
        ??? Bicycle.java
        ??? BicycleMain.java
Run Code Online (Sandbox Code Playgroud)

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;
  }
Run Code Online (Sandbox Code Playgroud)

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());
        } }
Run Code Online (Sandbox Code Playgroud)

我编译了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
Run Code Online (Sandbox Code Playgroud)

我尝试使用Netbeans和IT WORKS运行这些文件!但是为什么我在CLI中编译时它不起作用?

Sus*_* Kr 22

首先,要使用javac您编译java源文件,需要指定要显式编译的文件.

例:

javac PathToSourceFile/FileName.java
Run Code Online (Sandbox Code Playgroud)

您无需提供pathif源文件在当前工作目录中.

其次,每当遇到的java import abc.xyz.ClassName;它试图解决abc/xyz/ClassName关于classpath或当前工作目录.

因此,如果你在车辆文件夹内并编译你的代码,它将不会编译,因为它将寻找文件夹车辆内的文件夹车辆(它不存在!).

但是,你可以在车辆文件夹内执行此操作

javac -cp ../ BicycleMain.java
Run Code Online (Sandbox Code Playgroud)

它应该编译,因为classpath将设置为../包含车辆的directory().这将解决你的Bicycle课程.

然后使用

java -cp ../ vehicles/BicycleMain 跑步.

  • 或者,进入“src”目录(包含“vehicles”目录的目录),使用“javac cars/BicycleMain.java”进行编译,然后使用“java cars.BicycleMain”运行。 (2认同)

Ext*_*ers 8

尝试删除行中的行import vehicles.*;,BicycleMain.java并在命令行中使用javac进行编译.

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