簡體   English   中英

Javac“找不到符號”

[英]Javac "cannot find symbol"

我有這樣的根目錄:

├── classes
└── src
    └── vehicles
        ├── Bicycle.java
        └── BicycleMain.java

自行車.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;
  }

自行車主程序

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

其次,每當java遇到import abc.xyz.ClassName; 它嘗試根據classpath或當前工作目錄解析abc/xyz/ClassName

因此,如果您在車輛文件夾內並編譯您的代碼,它將不會編譯,因為它將在文件夾車輛(不存在!)中查找文件夾車輛。

但是,您可以在車輛文件夾中執行此操作

javac -cp ../ BicycleMain.java

它應該編譯,因為類路徑將設置為包含車輛的目錄( ../ )。 這將解決您的Bicycle課程。

然后使用

java -cp ../ vehicles/BicycleMain來運行。

嘗試刪除線import vehicles.*; 來自BicycleMain.java並在命令行中使用 javac 進行編譯。

順便說一下,這是因為當你在 javac 中編譯時,你在文件夾vehicles ,你寫了一條語句import vehicles.*; BicycleMain.java ,這對編譯器來說意味着在vehicles文件夾中還有另一個文件夾vehicles ,這里不是這種情況

我已經解決了這個問題,從“src”編譯。

像這樣: javac ./my_folder/my_file.java

親切的問候

我在這里嘗試了所有解決方案,但最終我發現問題在於我使用了不同版本的 JDK 和 JRE。

檢查 JRE 版本:

java -version

檢查JDK版本:

javac -version

只需從一開始就刪除包裝線,它就會 100% 工作。

通過終端轉到存儲文件的文件夾並鍵入javac *.java

也不需要導入類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM