Erreur "Cannot find symbol" en java

Résolu

Bonjour,

J'ai un problème au moment de la compilation où la machine indique:

ToDoList.java:3: error: package miniApp.event does not exist

import miniApp.event.Event;

 ^

symbol: class Event

location: class ToDoList

ToDoList.java:7: error: cannot find symbol

Event l1 = new Event();

symbol: class Event

location: class ToDoList

Il m'est impossible de trouver d'où provient l'erreur étant donné que le package miniApp.event.Event est bien existant.

La classe Event:

package miniApp.event;

import java.util.*;

public class Event {
    // Scanner prenant l'input
    private Scanner scan = new Scanner(System.in);
    // Tableau 
    private ArrayList<String> listDebHour = new ArrayList<String>();
    private ArrayList<String> listFinHour = new ArrayList<String>();
    private ArrayList<String> listEvent = new ArrayList<String>();

    private String event, debHours, finHours;
    private String convFin = finHours;
    private Boolean verif;


    /************************************
     * Accesseurs et mutateurs d'objets *
     ***********************************/
    public ArrayList<String> getListDebHour() {
        return listDebHour;
    }

    public ArrayList<String> getListFinHour() {
        return listFinHour;
    }

    public ArrayList<String> getListEvent() {
        return listEvent;
    }

    public int getDebHours() {
        // Conversion de string à int
        int deb = Integer.parseInt(debHours);
        return deb;
    }

    public int getFinHours() {
        // Conversion de string à int
        int fin = Integer.parseInt(finHours);
        return fin;
    }

    /***********************************
     * Constructeur de la classe Event *
     **********************************/
    public Event() {

        // Entrée des heures de début et de fin de l'évènement
        System.out.print("Entrez l'heure de debut: ");
        debHours = scan.nextLine();
        System.out.print("Entrez l'heure de fin: ");
        finHours = scan.nextLine();

        // Vérification du bon format de l'heure de début et de fin
        verif = verifHours(getDebHours(), getFinHours());
        if (!verif) {
            System.out.println("Entree invalide, l'heure de fin est automatiquement superieure a l'heure de debut");
            int deb = Integer.parseInt(debHours);
            int fin = Integer.parseInt(finHours);
            fin = deb + 1;
            convFin = Integer.toString(fin);
        } else {
            convFin = finHours;
        }
        
        // Entrée de l'identifiant de l'évènement
        System.out.printf("Entrez l'evenement pour %sh-%sh: ", debHours, convFin);
        event = scan.nextLine();

        // Ajout des éléments aux listes correspondantes
        listDebHour.add(debHours);
        listFinHour.add(convFin);
        listEvent.add(event);       
    }

    
    /*******************************************************************************
     * Vérification de la logique de l'heure de début par rapport à l'heure de fin *
     ******************************************************************************/
    public Boolean verifHours(int deb, int fin) {
        // Renvoie true si l'heure de début < l'heure de fin, sinon renvoie false
        if (deb > fin || deb < 0 || fin < 0 || deb == fin) {
            return false;
        } else {
            return true;
        }
    }

}

La classe principale ToDoList:

package miniApp;

import miniApp.event.Event;

public class ToDoList {
    public static void main(String[] args) {
        Event l1 = new Event();
        System.out.println(l1.getListDebHour());
        System.out.println(l1.getListFinHour());
        System.out.println(l1.getListEvent());

    }
}

2 réponses

  1. Modérateur

    Bonjour,

    Quelle est la commande que tu as utilisé pour arriver à ce résultat ?

    Normalement tu devrais faire :

    ​javac miniApp/event/Event.java miniApp/ToDoList.java

    ​puis :

    java miniApp.ToDoList

    La confiance n'exclut pas le contrôle

    0
    1. Bonjour,

      j'utilise directement la commande d'éxecution "java cheminDuFichier.java" qui compile à la volée et cette façon a toujours fonctionné mais cette fois-ci non. De plus, je ne vois pas vraiment d'erreur dans mon code.

      Arborescence des fichiers

      | miniApp

      | --- ToDoList.java

      | | event

      | | --- Event.java

      IDE utilisé:

      Visual Studio Code

      Java:

      Jdk 17

      0
      1. Modérateur

        j'utilise directement la commande d'éxecution "java cheminDuFichier.java" qui compile à la volée et cette façon a toujours fonctionné mais cette fois-ci non. 

        Dans la documentation c'est bien précisé que cette méthode ne fonctionne que pour un seul fichier.

        https://docs.oracle.com/en/java/javase/17/docs/specs/man/java.html#java-command-line-argument-files

        java [options] source-file [args ...]

        source-file

        Only used to launch a single source-file program. Specifies the source file that contains the main class when using source-file mode. See Using Source-File Mode to Launch Single-File Source-Code Programs

        Pour le cas général il faut se rapporter aux commandes que j'ai indiqué avec la commande javac qui compile les fichiers .java en .class et la commande java qui exécute les fichiers .class

        0
      2. @KX

        Je comprends bien mais mon problème ne vient probablement pas d'une erreur de commande car sur les mêmes fichiers, il y a 2 jours, ceux-ci se lançaient très bien. Dans le doute, j'ai essayé en compilant les fichiers et les éxecutant avec les mêmes commandes que vous avez échangé. Mais rien n'y fait.

        Ce qui a changé entre temps, c'est que j'avais incorporé du code graphique avec la lib awt et swing. Et cette erreur est survenue au moment d'incorporer le SwingUtilities.invokeLater()[...]. Du coup j'ai effacé tous les morceaux de code graphique et depuis ce problème persiste.

        0
      3. Modérateur
        @kasaix

        Je viens de tester sur mon PC, ton code fonctionne et toutes les commandes que j'ai donné sont les bonnes, donc ça devrait fonctionner, voici le détail de mon invites de commandes :

        G:\workspace> java -version
        java version "17.0.3.1" 2022-04-22 LTS
        Java(TM) SE Runtime Environment (build 17.0.3.1+2-LTS-6)
        Java HotSpot(TM) 64-Bit Server VM (build 17.0.3.1+2-LTS-6, mixed mode, sharing)
        
        G:\workspace> javac --version
        javac 17.0.3.1
        
        G:\workspace> tree /F
        Structure du dossier pour le volume G
        Le numéro de série du volume est 1234-5678
        G:.
        └───miniApp
            │   ToDoList.java
            │
            └───event
                    Event.java
        
        G:\workspace> javac miniApp/event/Event.java miniApp/ToDoList.java
        
        G:\workspace> tree /F
        Structure du dossier pour le volume G
        Le numéro de série du volume est 1234-5678
        G:.
        └───miniApp
            │   ToDoList.class
            │   ToDoList.java
            │
            └───event
                    Event.class
                    Event.java
        
        G:\workspace> java miniApp.ToDoList
        Entrez l'heure de debut: 8
        Entrez l'heure de fin: 15
        Entrez l'evenement pour 8h-15h: cours
        [8]
        [15]
        [cours]
        0
      4. @KX

        Merci pour ta réponse détaillée. Après quelques essaies, j'ai réussi à comprendre d'où provenait mon erreur. J'utilisais le chemin "java ToDoList.java" en étant dans le répertoire miniApp au lieu de "java miniApp.ToDoList" dans le répertoire src avec un sous-répertoire miniApp. Enfin du moins j'ai réussi à lancer comme ça.

        0