2012-04-16 4 views
1

나는 거친 무언가를 쳤다고 생각합니다 ... 당신의 생각을 알려주세요. I가 개발했습니다주석으로 인해 NoClassDefFoundError가 발생했습니다. 가장 이상한 자바 문제는 무엇입니까?

동안 지금은 몇 가지를 정의하는 데 사용할 주석를 사용 안드로이드을위한 인프라 프로젝트.

다음 주석을 살펴보고 컴파일해야합니다.하지만 장치에서 실행할 때 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; 

나는 말 이클립스 오류 얻을 :

enter image description here

을 그리고 이클립스는이 분야를 포함하는 클래스를 찾을 수 없습니다.

그래서 어떻게 생각하십니까? 클래스를 컴파일하는 중 오류가 발생 했습니까?

아담.

+1

:-) 도움이

희망? 주석 구문을 어떻게 용서하는지 모르겠다. –

+0

음 ... 그것을 들여다 보았다. 나는 일정한 배열을 사용했다. 아마 그런 경우 일까? 나는 그것을 조사 할 것이다. – TacB0sS

+0

나는 당신이 그것을 가지고 있다고 생각한다. – TacB0sS

답변

1

크기가 1 인 배열의 경우에도 listeners 필드에 배열 초기화 프로그램 구문이있는 것 같습니다. 심지어 크기 하나의 배열의`listeners` 필드가 배열 초기화 구문이해야

+0

그리고 나는 약간의 기억을 저장하려 했었다고 생각합니다 ... – TacB0sS

관련 문제