Что вызывает эту ошибку Java "Не удается найти символ"? - PullRequest
7 голосов
/ 28 ноября 2011

Я изменяю унаследованный код и продолжаю получать странную ошибку «не могу найти символ», которая сбивает меня с толку.

   //======= Error =========

Compiling 1 source file to /Users/Inprimus/Projects/Workspace/Soft/build/web/WEB-INF/classes
/Users/Inprimus/Projects/Workspace/Soft/WebContent/WEB-INF/classes/fr/service/CarPeer.java:49: cannot find symbol
symbol : method addCarToCompany(java.lang.Long,fr.model.company.Car)
location: class fr.dao.CompanyDAO
cmpDAO.addCarToCompany(idCompany,car);
^
1 error

Автомобиль peer:

package fr.service;    
import fr.model.company.Car;
import fr.dao.CompanyDAO;
import fr.dao.CarDao;

public class CarPeer {
    private static CarDao carDAO= new CarDao();
    private static CompanyDAO cmpDAO = new CompanyDAO();

    public static void storeCar(Long idCompany, Car car) throws UserServiceException, Exception {
        try {
            cmpDAO.addCarToCompany(idCompany,car);
            System.out.println("Car stored : "+car.toString()+" in "+idCompany);
            carDAO.storeCar(car);
        } catch(DAOException ex) {
            throw new UserServiceException(ex.getMessage(), ex);
        }
    }
}

CompanyDao:

   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);
    }
    }

Я трижды проверил, но пока не могу найти ничего плохого в коде.Я собираю его в Netbeans 7.0.1. Я должен упомянуть, что я получаю эту ошибку при сборке, но я могу запустить веб-приложение без каких-либо проблем (пока).Но я волнуюсь, что это может вернуться к началу.


Я только что заметил в дереве файлов, что над классами CompanyDAO названы файлы с аналогичным именем, имеющие формат: CompanyDAO $ ChildType # .class (# соответствует числу) Я предполагаю, что он не перекомпилировал класс, чтобы сгенерировать дополнительный дочерний тип, который я добавил.Как я могу повлиять на это?

Ответы [ 6 ]

6 голосов
/ 28 ноября 2011

Скорее всего, вы используете ранее скомпилированный файл класса (у которого не было метода) в вашем пути к классам, и система пытается использовать его вместо вашего текущего исходного кода.

В противном случае очистите рабочее пространство, не зависите от существующих компиляций и попробуйте снова. Это случилось со мной в прошлом.

4 голосов
/ 02 февраля 2012

У меня все та же проблема (хотя я не знаю, по той же ли причине). Для меня единственное, что работает (кроме отключения этой "надежной" IDE), - это удаление кеша. На окнах он расположен в %UserProfile%\.netbeans\7.0\var\cache. Я полагаю на * nix, это может быть под ~/.netbeans/7.0/var/cache. Сначала необходимо выйти из NetBeans, удалить кэш, а затем снова запустить NetBeans.

2 голосов
/ 28 ноября 2011

CompanyDao компилируется и доступен на пути к классам до CarPeer?

2 голосов
/ 28 ноября 2011

Очистите и постройте свой проект.Если это не сработает, перезапустите Netbeans.Иногда NetBeans выдает странные ошибки, и полный перезапуск NetBeans и / или компьютера, по-видимому, устраняет эти необъяснимые проблемы.

1 голос
/ 16 декабря 2017

Это может быть проблемой, потому что текущий экземпляр netbeans, который вы используете, использует ранее созданный кеш во время его инициализации. Итак, чтобы очистить кеш netbeans, вы можете выполнить любой из этих двух шагов, упомянутых ниже.

ПОДХОД 1
1. щелкните правой кнопкой мыши на имени вашего проекта в NetBeans на вкладке проектов.
2. нажмите очистить и построить вариант.
3. Кеш очищен.

ПОДХОД 2
1. Нажмите «Windows + R» и введите «% UserProfile% / appdata / local / netbeans».
2. Перейдите в папку кэша, а затем в папку с именем, указав версию NetBeans.
3. Закройте NetBeans и удалите все файлы, присутствующие в папке.
4. Перезапустите NetBeans, и теперь вы сможете увидеть имя класса.

Если любой из этих методов не сработал, возможно, ваш путь к классу неверен.

1 голос
/ 26 июня 2013

При использовании Netbeans 7.2+ выполните следующие действия:

  • Закройте все вкладки и выйдите из Netbeans;
  • Удалите каталог кэша: ~ / .cache / netbeans / VERSION.Где VERSION - это версия NetBeans, т.е. 7.3.1
  • Перезапустите NetBeans и «Очистить и построить»

Также см. Как очистить кэш в NetBeans

...