8

我正在修改继承的代码并不断收到一个奇怪的“找不到符号”错误,这让我很失望。

   //======= 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

汽车同行:

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

公司道:

   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 中构建它。我应该提到我在构建时收到此错误,但我可以运行 Web 应用程序而没有任何问题(目前)。但我担心这可能会卷土重来。


我刚刚在文件树中注意到,上面的 CompanyDAO 类是类似命名的文件,格式如下:CompanyDAO$ChildType#.class(# 对应于一个数字)我猜它没有重新编译类来生成额外的我添加的子类型。我怎样才能做到这一点?

4

6 回答 6

6

很可能您在类路径中使用了以前编译的类文件(没有方法),并且系统正在尝试使用它而不是您当前的源代码。

否则,清理您的工作区,不要依赖现有的编译并重试。这在过去发生在我身上。

于 2011-11-28T16:23:50.153 回答
5

我一直遇到同样的问题(尽管我不知道是否出于同样的原因)。对我来说,唯一可行的(除了放弃这个“强大的”IDE)是删除缓存。在 Windows 上,它位于%UserProfile%\.netbeans\7.0\var\cache. 我想在 *nix 上,它可能在~/.netbeans/7.0/var/cache. 您必须先退出 NetBeans,删除缓存,然后再次启动 NetBeans。

于 2012-02-01T22:47:50.197 回答
3

CompanyDao 是否在 CarPeer 之前编译并在类路径上可用?

于 2011-11-28T17:12:31.170 回答
2

清理并构建您的项目。如果这不起作用,则重新启动 Netbeans。有时 Netbeans 会出现奇怪的错误,而 Netbeans 和/或计算机的完全重启似乎可以解决这些无法解释的问题。

于 2011-11-28T16:35:24.687 回答
1

使用 Netbeans 7.2+ 时,请执行以下操作:

  • 关闭所有选项卡并退出 Netbeans;
  • 删除缓存目录:~/.cache/netbeans/VERSION。其中 VERSION 是 Netbeans 版本,即 7.3.1
  • 重新启动 Netbeans 和“清理并构建”

另请参阅如何清除 NetBeans 中的缓存

更新(2021 年 1 月)

@Netbeans 12.2 仍然有效。

使用 snap 安装 Netbeans 时,要删除/清理的目录为:~/snap/netbeans/common/cache

于 2013-06-26T13:51:20.767 回答
1

这可能是问题所在,因为您正在运行的当前 netbeans 实例在其初始化期间正在使用先前构建的缓存。因此,为了清除 netbeans 缓存,您可以执行下面提到的这两个步骤中的任何一个。

方法 1
1. 在项目选项卡中的 netbeans 中右键单击您的项目名称。
2. 单击清理和构建选项。
3.缓存已被清除。

方法 2
1. 单击“windows 键 + R”并键入“%UserProfile%/appdata/local/netbeans”。
2. 导航到缓存文件夹,然后导航到名称指定 netbeans 版本的文件夹。
3. 关闭 Netbeans 并删除文件夹中存在的所有文件。
4. 重启netbeans,现在你就可以看到类名了。

如果这些方法中的任何一个都不起作用,那么可能是您的类路径不正确。

于 2017-12-16T18:45:45.337 回答