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

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クラスの上に次の形式の同様の名前のファイルがあることに気付きました:CompanyDAO $ ChildType#.class(#は数字に対応します)余分なものを生成するためにクラスを再コンパイルしていないと思います子タイプIを追加しました。どうすればこれを実行できますか?

4

6 に答える 6

6

ほとんどの場合、以前にコンパイルされたクラス ファイル ( method を持たない) をクラスパスで使用しており、システムは現在のソース コードの代わりにそれを使用しようとしています。

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

于 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で動作します。

Netbeans が snap でインストールされている場合、削除 / クリーンアップするディレクトリは次のとおりです。~/snap/netbeans/common/cache

于 2013-06-26T13:51:20.767 に答える
1

これは、実行中の現在の netbeans インスタンスが初期化中に以前に構築されたキャッシュを利用しているため、問題になる可能性があります。したがって、netbeans キャッシュをクリアするには、以下で説明する 2 つの手順のいずれかを実行できます。

アプローチ 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 に答える