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?
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.
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.
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.
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