2011-11-28 17 views
6

Devralınan kodu değiştiriyorum ve beni tutacak bir tuhaf "sembolü bulamıyor" hatasını alıyorum.Bu Java'ya neden "Sembol bulamıyor" hatası?

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

Araç akran:

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

Üçlü kontrol ettiniz ama şimdiye kadar koduyla yanlış bir şey bulamıyorum. Bunu Netbeans 7.0.1'de yapıyorum. Oluşturduğumda bu hatayı aldığımı belirtmeliyim, ancak web uygulamasını herhangi bir sorun olmadan çalıştırabilirim (henüz). Ama endişeliyim ki bu arkada ısırmak için geri gelebilir.


Sadece CompanyDAO sınıfları Yukarıdaki biçimi taşıyan benzer şekilde adlandırılmış dosyaları dosya ağacında fark: CompanyDAO $ ChildType # .class (# bir sayıya tekabül eder) Ben yeniden henüz tahmin ediyorum Ekstra tipte çocuk üretmek için sınıfı derledim. Bunu nasıl etkileyebilirim?

+0

Projeyi temizlemeye/tam bir yeniden oluşturma mı denediniz? – solendil

+1

Temiz bir yapıyı denediniz mi? Ayrıca ClassAnd içinde CompanyDAO sınıflarının bir kopyasına sahip olabilecek bir kavanoz veya başka bir klasör var mı? – gkamal

cevap

2

CompanyPayer, CarPeer'den önce sınıf yolunda derlenip kullanılabilir mi?

+1

aletlerini kullanıp kullanamayacağımı bilmiyorum Emin değilim –

+0

@ DarkStar1 Yapım yolunuzun veya kaynak yolunuzun sırasına veya NetBeans'in ne dediğine bakın. – Mark

+0

Projeyi Eclipse'de açmak zorunda kaldım ve sorunu çözmek için yapım aracını kullandım. Her şeyi düzgün bir şekilde derledi. –

6

Büyük olasılıkla, sınıf yolunuzda önceden derlenmiş bir sınıf dosyası (yöntemi olmayan) kullanıyorsunuz ve sistem geçerli kaynak kodunuzun yerine kullanmaya çalışıyor. Aksi takdirde, çalışma alanınızı temizleyin, varolan derlemelere bağlı kalmayın ve tekrar deneyin. Bu geçmişte bana oldu.

+0

Çalışma alanını temizlemeyi deneyeceğim ve belki de haklısınız. Ama ben bu sınıfı kendim topladım. Tüm paket (ve webapp bir klon) –

+0

Nope, çalışma alanını temizlemek için bir yol olmadığı sürece, aynı zamanda proje özelliklerinde bağımlılıkları kaldırmak için –

+0

Nope. Yaptığım hiçbir şey bu hatadan kurtulacak gibi görünmüyor. Bunun yerine eclipse deneyebilirsiniz ve kullanabildiğim dürüst olmak için –

1

Projenizi temizleyin ve oluşturun. Bu işe yaramazsa, Netbeans'i yeniden başlatın. Bazen Netbeans garip hatalar verir ve Netbeans ve/veya bilgisayarın tam olarak yeniden başlatılması, bu açıklanamayan sorunları giderir.

4

Aynı sorunu yaşıyorum (aynı nedenden ötürü bilmeme rağmen). Benim için işe yarayan tek şey (bu "güçlü" IDE'yi atmak dışında) önbelleği silmek. Pencerelerde, %UserProfile%\.netbeans\7.0\var\cache'da bulunur. Sanırım * nix, ~/.netbeans/7.0/var/cache'un altında olabilir. Önce NetBeans'den çıkmanız, önbelleği silmeniz ve NetBeans'i yeniden başlatmanız gerekir.

+0

netbeans 8.0.2'de önbellek aynı yerde görünmez. % UserProfile% \ AppData \ Local \ NetBeans \ Cache içinde bir önbellek buldum Belki de aynıdır. – m3z

1

aşağıdakileri yapın 7.2+ Netbeans kullanırken:

tüm sekmeleri ve çıkış Netbeans Kapat
  • ;
  • Önbellek dizinini kaldırın: ~/.cache/netbeans/VERSION. VERSİYONU Netbeans versiyonu, yani 7.3.1
  • Yeniden NetBeans ve "Temiz & Yapı"

olduğu yerlerde Çalıştırdığınız güncel netbeans örneği olduğu için de How to clear the Cache in NetBeans

0

Bu sorun olabilir bakın Başlatma sırasında önceden oluşturulmuş önbellekten yararlanma. Yani, netbeans önbelleğini temizlemek için aşağıda belirtilen iki adımdan herhangi birini gerçekleştirebilirsiniz.

YAKLAŞIM 1
1. doğru projeler sekmede netbeans proje adını tıklayın.
2. numaralı telefonu temizleyin ve seçeneğini oluşturun.
3. Önbellek temizlendi.

Yaklaşım 2
1. "pencere tuşu + R" ve tip "% UserProfile%/Appdata/yerel/netbeans".
2. Önbellek klasörüne ve ardından netbeans sürümünü belirten adla klasöre gidin.
3. Netbeans'ı kapatın ve klasördeki tüm dosyaları silin.
4. Netbeans'i yeniden başlatın ve şimdi sınıf adını görebileceksiniz.

Bu yöntemlerden herhangi biri işe yaramadıysa, sınıf yolunuzun doğru olmaması durumu olabilir.

İlgili konular