web-dev-qa-db-fra.com

Javac "ne trouve pas le symbole"

J'ai le répertoire racine comme ceci:

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

Vélo.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());
        } }

J'ai compilé Bicycle.Java et réussi, mais pas pour 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

J'essaie d'exécuter ces fichiers avec Netbeans et IT WORKS! mais pourquoi ça ne marche pas quand je compile en CLI?

15
andrian

Tout d'abord, pour compiler le fichier source Java à l'aide de javac, vous devez spécifier les fichiers à compiler explicitement.

Exemple:

javac PathToSourceFile/FileName.Java

vous n'avez pas besoin de fournir path si le fichier source est dans le répertoire de travail en cours.

Deuxièmement, chaque fois que Java rencontre import abc.xyz.ClassName;, il tente de résoudre abc/xyz/ClassName en respectant la variable classpath ou le répertoire de travail en cours.

Donc, si vous êtes dans le dossier de véhicules et compilez votre code, il ne sera pas compilé car il recherchera les véhicules de dossiers dans les véhicules de dossiers (ce qui n'existe pas!).

mais vous pouvez le faire lorsque vous vous trouvez dans le dossier du véhicule 

javac -cp ../ BicycleMain.Java

et il devrait compiler, car classpath sera défini sur le répertoire (../) contenant les véhicules. ce qui résoudra votre classe Bicycle.

et ensuite utiliser 

Java -cp ../ vehicles/BicycleMain à exécuter.

21
Sushant Kr

Essayez de supprimer la ligne import vehicles.*; de BicycleMain.Java et de les compiler avec javac en ligne de commande.

Soit dit en passant, lors de la compilation dans javac, vous vous trouvez dans le dossier vehicles et vous écrivez une instruction import vehicles.*; dans BicycleMain.Java, ce qui signifie que le compilateur a un autre dossier vehicles dans le dossier vehicles, ce qui n’est pas le cas ici.

8
Extreme Coders

Supprimez simplement la ligne de paquetage du début et cela fonctionnera à 100%.

Allez dans le dossier dans lequel les fichiers sont stockés via le terminal et tapez Tapez javac * .Java

Il n'y aura pas besoin d'importer des classes aussi.

0
Praveen Rana

J'ai résolu ce problème en compilant à partir de "src".

Quelque chose comme ceci: javac ./my_folder/my_file.Java

Sincères amitiés

0
Antonio Blanco