2011-11-28 8 views
6

私は継承されたコードを変更していて、奇妙な "シンボルを見つけることができません"というエラーが出て、私を捨ててしまいます。このJavaの「シンボルを見つけることができません」というエラーの原因は何ですか?

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

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でビルドしています。ビルド時にこのエラーが出ることは言及しておきますが、問題なくWebアプリケーションを実行できます(まだ)。しかし、私はこれが後ろに噛み付くかもしれないことを心配しています。 (#は番号に対応する)私はそれが再していない推測しているCompanyDAO $ ChildType#の.class:私はちょうどCompanyDAOクラスの上に同様の形式をもつファイルを命名されているファイルツリーに気づい


余分な子を生成するためにクラスをコンパイルしました。タイプIが追加されました。これをどうすればいいですか?

+0

プロジェクトのクリーン/完全な再構築を試行しましたか? – solendil

+1

クリーンビルドを試しましたか?クラスパス内に、CompanyDAOクラスのコピーを持つ可能性のあるjarまたは別のフォルダがありますか? – gkamal

答えて

2

CompanyDaoはCarPeerの前にクラスパスでコンパイルされ、利用可能ですか?

+1

正直言ってわかりません –

+0

@ DarkStar1ビルドパスまたはソースパスの順番、またはNetBeansが呼び出すものを見てみましょう。 – Mark

+0

私はEclipseでプロジェクトを開いて、ビルドツールを使って問題を解決しなければなりませんでした。それはすべてを正しくコンパイルしました。 –

6

あなたのクラスパスに以前にコンパイルされたクラスファイル(メソッドを持たない)を使用している可能性があり、システムは現在のソースコードではなくそのファイルを使用しようとしています。

それ以外の場合は、作業領域をクリーンアップし、既存のコンパイルに依存せずに再試行してください。これは過去に私に起こった。

+0

私はワークスペースをきれいにしようとするでしょう。しかし、私はこのクラスを自分でコーディングしました。パッケージ全体(とwebappはクローンです) –

+0

作業領域をクリーンアップする方法がない限り、プロジェクトプロパティで依存関係を削除する場所がわかりません。 –

+0

Nope私はこのエラーを取り除くことができないようです。代わりにEclipseを試して、ビルドツールを使用できるかどうかを確認してください –

1

プロジェクトをクリーンにしてビルドします。それでも問題が解決しない場合は、Netbeansを再起動してください。時々Netbeansは奇妙なエラーを出し、Netbeansやコンピュータの完全な再起動は、これらの説明できない問題を解決するように見えます。

4

私は同じ問題を抱えています(同じ理由であるかどうかはわかりませんが)。私にとっては、(この「堅牢な」IDEを廃止することを除いて)機能する唯一の方法は、キャッシュを削除することです。窓では、%UserProfile%\.netbeans\7.0\var\cacheにあります。私は* nixで、それは~/.netbeans/7.0/var/cacheの下になる可能性があります。最初にNetBeansを終了し、キャッシュを削除してからNetBeansを再起動する必要があります。

+0

in netbeans 8.0.2キャッシュが同じ場所に表示されません。私は%UserProfile%\ AppData \ Local \ NetBeans \ Cacheにキャッシュを見つけました。 恐らくそれは同じものです。 – m3z

1

NetBeansは、次の操作を行い7.2+使用:

閉じる
  • すべてのタブと出口Netbeansの。
  • キャッシュディレクトリを削除します:〜/ .cache/netbeans/VERSION。 VERSIONは、すなわち7.3.1
  • 再起動NetBeansと「クリーン&ビルド」

また、あなたが実行している現在のNetBeansインスタンスがあるので、これは問題になる可能性がHow to clear the Cache in NetBeans

0

を参照して、Netbeansのバージョンである場合にはその初期化の間に前に構築されたキャッシュを利用する。したがって、ネットビーンキャッシュをクリアするには、以下の2つのステップのいずれかを実行できます。

APPROACH 1
1.右プロジェクト]タブでNetBeansでプロジェクト名をクリックしてください。
2. クリーンをクリックし、オプションをビルドします。
3.キャッシュがクリアされました。

APPROACH 2
1. [ "Windowsキー+ R" とタイプ "%USERPROFILE%/ APPDATA /ローカル/ netbeansと"。
2.キャッシュフォルダに移動し、次にnetbeansのバージョンを指定する名前のフォルダに移動します。
3. Netbeansを閉じて、フォルダ内のすべてのファイルを削除します。
4. netbeansを再起動すると、クラス名が表示されます。

これらの方法のいずれかが機能しなかった場合は、クラスパスが正しくない可能性があります。

関連する問題