2012-04-16 8 views
1

私は何か荒いヒットしたと思う...私はあなたの考えを知らせてください。AnnapationのためにNoClassDefFoundErrorという奇妙なJavaの問題が発生しましたか?

私は物事のカップルを定義するために使用注釈を、使用していますアンドロイド、しばらく今インフラプロジェクトのために開発されてきました。

次のアノテーションを見て、コンパイルする必要がありますが、デバイスで実行すると、NoClassDefFoundExceptionが発生します。

@Target({FIELD}) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface ViewIdentifier { 

    int viewId() default -1; 

    int[] viewIds() default {}; 

    ViewUI_Action[] listeners() default {}; 

    boolean forDev() default false; 

} 

これは実装です:私はViewIdentifier注釈を削除すると

@SuppressWarnings("unused") 
@ViewIdentifier(
     listeners = ViewUI_Action.OnClickAsCollection, 
     viewIds = {R.id.AccelerometerEngineeringScreen, R.id.RotationVectorEngineeringScreen, R.id.NetworkEngineeringScreen, 
       R.id.MagneticEngineeringScreen, R.id.OrientationEngineeringScreen, R.id.GPS_EngineeringScreen, R.id.CallsEngineeringScreen, 
       R.id.UpgradeAppButton, R.id.DEV_Action_Button, R.id.FYI_Button}) 
private View[] modelViews; 

、コードをコンパイルし、正常に動作、アプリが起動し、私は、注釈を返す場合、 NoClassDefFoundErrorが続きます。

これはきれいなビルドの問題ではありません。これを投稿する前に非常に注意しています。また、欠落しているクラスファイルはbin/classesにあり、アノテーションを削除するときれいなビルドに関係なく機能します。ワークスペースの再構築、プロジェクトのクローズ、Eclipseの再起動、その他のトリックを試しました。

私はアノテーションのパラメータを例えば逆にすると奇妙なことです。

@SuppressWarnings("unused") 
@ViewIdentifier(
     viewIds = {R.id.AccelerometerEngineeringScreen, R.id.RotationVectorEngineeringScreen, R.id.NetworkEngineeringScreen, 
       R.id.MagneticEngineeringScreen, R.id.OrientationEngineeringScreen, R.id.GPS_EngineeringScreen, R.id.CallsEngineeringScreen, 
       R.id.UpgradeAppButton, R.id.DEV_Action_Button, R.id.FYI_Button}, 
     listeners = ViewUI_Action.OnClickAsCollection) 
private View[] modelViews; 

私が言って、Eclipseのエラーを取得:

enter image description here

とEclipseは、このフィールドを含むクラスを見つけることができません。

あなたはどう思いますか?クラスのコンパイル中にエラーが発生しましたか?

アダム。

+1

サイズが1の配列の場合でも 'listeners'フィールドに配列初期化子の構文を付ける必要がありますか?私は注釈構文をどのように許しているのかわかりません。 –

+0

うん...それを見てください。私は定数配列を使用しています...おそらくそうでしょうか?確かめます。 – TacB0sS

+0

私はあなたがそれを持っていると思う... – TacB0sS

答えて

1

サイズが1の配列であっても、配列初期化子の構文を持っていると思われます(listeners)。

希望するもの:-)

+0

そして私は記憶を保存しようとしていたと思います... – TacB0sS

関連する問題