8
votes

Qu'est-ce qui cause cette erreur Java "Impossible de trouver le symbole"?

Je modifie le code hérité et je continue à obtenir une erreur bizarre "Impossible de trouver le symbole" qui me jette. XXX PRE>

Peer de voiture: P>

   package fr.dao;
    import fr.model.accounting.Cost;
    import fr.model.company.Car;

    public class CompanyDAO extends GenericDAO<Company> {

    private enum ChildType {
    COST{
    public void addChildToCompany(Company company, Object child) {
    company.addCost((Cost)child);
    }
    },
    CAR{
    public void addChildToCompany(Company company, Object child) {
    company.addCar((Car)child);
    }
    };
    public abstract void addChildToCompany(Company company, Object child);
    }
private void addChildToCompany(Long idCompany, Object child, ChildType type) throws NotFoundDAOException, AlreadyExistDAOException, Exception {
        try {
            // Begin unit of work
            Session session = HibernateUtil.getSessionFactory().getCurrentSession();
            session.beginTransaction();

            Company company = (Company) session.load(Company.class, idCompany);

            type.addChildToCompany(company, child);
            session.flush();

            // End unit of work
            session.getTransaction().commit();

        } catch (ObjectNotFoundException ex) {
            HibernateUtil.getSessionFactory().getCurrentSession().getTransaction().rollback();
            throw new NotFoundDAOException("Identified object " + idCompany
                    + " doesn't exist in database", ex);
        } catch (ConstraintViolationException ex) {
            HibernateUtil.getSessionFactory().getCurrentSession().getTransaction().rollback();
            throw new AlreadyExistDAOException("The new identity already exsits in database", ex);
        } catch (Exception ex) {
            ex.printStackTrace();
            HibernateUtil.getSessionFactory().getCurrentSession().getTransaction().rollback();
            throw new Exception(ex);
        }
    }
    public CompanyDAO() {
    super(Company.class);
    }
    public void addCarToCompany(Long idCompany, Car car) throws NotFoundDAOException, AlreadyExistDAOException, Exception {
    addChildToCompany(idCompany, car, ChildType.CAR);
    }
    }


2 commentaires

J'ai essayé de nettoyer le projet / effectuer une reconstruction complète?


Avez-vous essayé une construction propre? Avez-vous un bocal ou un autre dossier dans CLASSPATH qui pourrait également avoir une copie des cours de sociétéDao?


6 Réponses :


6
votes

Très probablement Vous utilisez un fichier de classe précédemment compilé (qui n'avait pas la méthode) de votre path et que le système tente d'utiliser cela au lieu de votre code source actuel.

Sinon, nettoyez votre espace de travail, ne dépendez pas des compilations existantes et réessayez. Cela m'est arrivé dans le passé.


3 commentaires

Je vais essayer de nettoyer l'espace de travail et vous avez peut-être raison. Mais j'ai codé cette classe moi-même de la terre. L'ensemble du paquet (et WebApp est un clone)


Nope sauf s'il y a un moyen de nettoyer l'espace de travail aussi, je ne peux pas voir où dans les propriétés du projet pour supprimer les dépendances


Nan. Je n'ai rien semble pouvoir se débarrasser de cette erreur. Peut essayer Eclipse à la place et voir si je peux utiliser ses outils de construction



2
votes

Nettoyez et construisez votre projet. Si cela ne fonctionne pas, puis redémarrez Netbeans. Parfois, NetBeans donne des erreurs étranges et un redémarrage complet de NetBeans et / ou de l'ordinateur semble fixer ces problèmes inexplicables.


0 commentaires

3
votes

CompanyDao est compilé et disponible sur la classe de classe avant la cachette?


2 commentaires

@ DarkStar1 Jetez un coup d'œil à l'ordre de votre chemin de construction ou de votre chemin source ou tout ce que les NetBeans l'appelle.


Je devais ouvrir le projet dans Eclipse et utiliser l'outil de construction pour résoudre le problème. Il a complètement compilé tout.



5
votes

Je continue à avoir le même problème (bien que je ne sache pas si c'est pour la même raison). Pour moi, la seule chose qui fonctionne (en dehors de la fossé de cette "IDE" robuste ") consiste à supprimer le cache. Sous Windows, il est situé dans % userprofile% \. NetBeans \ 7.0 \ var \ cache . Je suppose que sur * Nix, il pourrait être sous ~ / .netbeans / 7.0 / var / cache . Vous devez d'abord quitter Netbeans, supprimer le cache, puis commencer Netbeans à nouveau.


1 commentaires

Dans NetBeans 8.0.2, le cache n'apparaît pas au même endroit. J'ai trouvé un cache en% UserProfile% \ appdata \ local \ netbeans \ cache peut-être c'est le même.



1
votes

Lorsque vous utilisez NetBeans 7.2+, procédez comme suit:

  • Fermer tous les onglets et quitter Netbeans;
  • Supprimer le répertoire de cache: ~ / .Cache / NetBeans / Version. Où la version est la version NetBeans, c'est-à-dire 7.3.1
  • Redémarrez Netbeans et "Clean & Build"

    Voir aussi Comment effacer le cache dans NetBeans

    mise à jour (janvier 2021)

    fonctionne toujours @ Netbeans 12.2.

    Lorsque NetBeans est installé avec Snap, le répertoire à supprimer / nettoyer est le suivant: ~ / snap / Netbeans / Common / Cache


0 commentaires

1
votes

Cela pourrait être le problème car l'instance de NetBeans actuelle que vous exécutez utilise le cache de construction précédemment lors de son initialisation. Ainsi, afin d'effacer le cache NetBeans, vous pouvez effectuer l'une de ces deux étapes mentionnées ci-dessous.

Approche 1 de
1. Cliquez avec le bouton droit de la souris sur votre nom de projet dans Netbeans dans l'onglet Projets. de
2. Cliquez sur l'option propre et propre . de
3. Le cache a été effacé.

Approche 2 de
1. Cliquez sur "Touche Windows + R" et tapez "% UserProfile% / AppData / local / Netbeans". de
2. Naviguez jusqu'au dossier de cache, puis sur le dossier avec le nom spécifiant la version NetBeans. de
3. Fermez les NetBeans et supprimez tous les fichiers présents dans le dossier. de
4. Redémarrez les NetBeans et vous pourrez désormais voir le nom de la classe. de
de
Si l'une de ces méthodes ne fonctionnait pas, il serait peut-être que votre point de classe n'est pas correct.


0 commentaires