2011-11-28 9 views
6

Estoy modificando el código heredado y sigo recibiendo un extraño error de "no puedo encontrar el símbolo" que me está arrojando.¿Qué causa este error de Java "No se puede encontrar el símbolo"?

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

pares Coche:

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

triples He comprobado pero no puedo encontrar nada malo con el código hasta el momento. Lo estoy construyendo en Netbeans 7.0.1. Debo mencionar que recibo este error cuando construyo, pero puedo ejecutar la aplicación web sin ningún problema (todavía). Pero estoy preocupado de que esto pueda volver a morder el trasero.


acabo de notar en el árbol de archivos que por encima de las clases CompanyDAO son archivos con nombres similares que llevan el formato: CompanyDAO $ ChildType # .class (# corresponde a un número) supongo que no ha re- compiló la clase para generar el niño adicional que agregué. ¿Cómo puedo afectar esto?

+0

¿Intentó limpiar el proyecto/realizar una reconstrucción completa? – solendil

+1

¿Has probado una compilación limpia? ¿Tiene un jar u otra carpeta en classpath que también podría tener una copia de las clases de CompanyDAO? – gkamal

Respuesta

2

¿Se está compilando Companydand y está disponible en el classpath antes de CarPeer?

+1

para ser sincero, no estoy seguro –

+0

@ DarkStar1 Eche un vistazo al orden de su ruta de compilación o fuente o lo que sea que NetBeans lo llame. – Mark

+0

Tuve que abrir el proyecto en Eclipse y usé la herramienta de compilación para resolver el problema. Compiló apropiadamente todo. –

6

Es muy probable que esté utilizando un archivo de clase previamente compilado (que no tenía el método) en su classpath y el sistema está tratando de usarlo en lugar de su código fuente actual.

De lo contrario, limpie su espacio de trabajo, no dependa de las compilaciones existentes y vuelva a intentarlo. Esto me ha pasado en el pasado.

+0

Intentaré limpiar el espacio de trabajo y quizás sea así. Pero codifiqué esta clase yo mismo desde cero. El paquete completo (y la aplicación web es un clon) –

+0

No, a menos que haya una forma de limpiar el espacio de trabajo, tampoco puedo ver en qué parte de las propiedades del proyecto eliminar las dependencias –

+0

No. Nada de lo que hago parece ser capaz de deshacerse de este error. Podría intentar eclipsar en su lugar y ver si puedo usar sus herramientas de compilación –

1

Limpie y construya su proyecto. Si eso no funciona, reinicie Netbeans. A veces Netbeans produce errores extraños y un reinicio completo de Netbeans y/o computadora parece solucionar estos problemas inexplicables.

4

Sigo teniendo el mismo problema (aunque no sé si es por la misma razón). Para mí, lo único que funciona (además de abandonar este IDE "robusto") es eliminar la memoria caché. En Windows, está ubicado en %UserProfile%\.netbeans\7.0\var\cache. Supongo que en * nix, podría estar bajo ~/.netbeans/7.0/var/cache. Primero debe salir de NetBeans, eliminar el caché y luego iniciar NetBeans nuevamente.

+0

en netbeans 8.0.2 el caché no aparece en el mismo lugar. Encontré un caché en% UserProfile% \ AppData \ Local \ NetBeans \ Cache Quizás sea el mismo. – m3z

1

Al usar Netbeans 7.2+ hacer lo siguiente:

  • Cerrar todas las pestañas y Netbeans salida;
  • Eliminar el directorio de caché: ~/.cache/netbeans/VERSION. Donde VERSION es la versión de Netbeans, es decir 7.3.1
  • Reiniciar Netbeans y "Clean & Construir"

Véase también How to clear the Cache in NetBeans

0

Este podría ser el problema porque la instancia actual de NetBeans que se está ejecutando es haciendo uso de la memoria caché previamente creada durante su inicialización. Por lo tanto, para borrar la caché de Netbeans, puede realizar cualquiera de estos dos pasos mencionados a continuación.

ENFOQUE 1
1. Haga clic en el nombre del proyecto en NetBeans en la pestaña proyectos.
2. haga clic en limpiar y compilar opción.
3. La memoria caché se ha borrado.

ENFOQUE 2
1. Haga clic en "tecla de Windows + R" y el tipo "% USERPROFILE%/AppData/local/netbeans".
2. Navegue a la carpeta de caché y luego a la carpeta con el nombre que especifica la versión de netbeans.
3. Cierre Netbeans y elimine todos los archivos presentes en la carpeta.
4. Reinicie netbeans y ahora podrá ver el nombre de la clase.

Si alguno de estos métodos no funcionó, entonces puede ser que su classpath no sea correcto.

Cuestiones relacionadas