Javac"找不到符号"

时间:2012-11-24 02:14:34

标签: java compilation command-line-interface 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中编译时它不起作用?

5 个答案:

答案 0 :(得分:22)

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

示例:

javac PathToSourceFile/FileName.java

如果源文件在当前工作目录中,则无需提供path

其次,每当java遇到import abc.xyz.ClassName;时,它会尝试解析abc/xyz/ClassName或当前工作目录的classpath

因此,如果您在车辆文件夹内并编译您的代码,它将无法编译,因为它将查找文件夹车辆内的文件夹车辆(不存在!)。

但是,您可以在车辆文件夹

内执行此操作
javac -cp ../ BicycleMain.java

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

然后使用

java -cp ../ vehicles/BicycleMain要跑。

答案 1 :(得分:8)

尝试从import vehicles.*;删除行BicycleMain.java,然后在命令行中使用javac进行编译。

顺便说一下,因为当你在javac中编译时,你在vehicles文件夹中并在import vehicles.*;中写了一个语句BicycleMain.java,这意味着编译器有另一个文件夹vehicles文件夹中的vehicles,而不是此处

答案 2 :(得分:0)

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

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

亲切的问候

答案 3 :(得分:0)

我在这里尝试了所有解决方案,但最终我发现问题出在我使用的是JDK和JRE的不同版本。

检查JRE版本:

const routes = [
 { path: 'user', component: UserComponent, canActivate: [AuthGuard]},...]

检查JDK版本:

java -version

答案 4 :(得分:-1)

只需从开头删除包装行,它就可以100%工作。

转到通过终端和存储文件的文件夹 输入 javac * .java

也不需要导入课程。