2014-05-21 3 views
-1
import java.lang.annotation.*; 
import java.lang.reflect.*; 
@Retention(RetentionPolicy.CLASS) 
@interface MyAnno{ 
    String str(); 
    int val(); 


} 
public class Meta { 
@MyAnno(str ="Annotation Example",val=100) 
public static void myMeth(){ 
    Meta ob = new Meta(); 
    try{ 
     Class c = ob.getClass(); 
     Method m = c.getMethod("myMeth"); 

     MyAnno anno = m.getAnnotation(MyAnno.class); 
     System.out.println(anno.str()+" "+anno.val()); 
    }catch (NoSuchMethodException exc){ 
     System.out.println("Method not found"); 
    } 
} 
public static void main(String[] args) { 
    myMeth(); 
} 

} 

이 프로그램을 실행하는 동안이 null 포인터 예외가 발생하는 이유는 무엇이며 어떻게이 예외를 잡아 내고 마지막으로이 코드를 해결할 수 있습니까?(예외 스레드 "main"java.lang.NullPointerException 예외)

Exception in thread "main" java.lang.NullPointerException  
    at Meta.myMeth(Meta.java:19) 
    at Meta.main(Meta.java:25) 
+0

는 "주"java.lang.NullPointerException이에게 스레드에서 – Danix

+0

예외를 귀하의 스택 트레이스를하시기 바랍니다 추가 사용할 수 Meta.myMeth (Meta.java:19) Meta.main에서 \t (Meta.java:25에서 \t) –

답변

1

런타임시 주석을 유지해야합니다.

주석이 컴파일러에 의해 클래스 파일에 기록 할 수 있지만 가 실행시에 VM에 의해 유지 될 필요가있다 : 당신이 RetentionPolicy.CLASS를 지정하면 문서가 말한대로,이 수행되지 않습니다.

그래서 @Retention(RetentionPolicy.RUNTIME)

+0

고맙습니다. –

1

CLASSRetentionPolicy가 런타임에 VM에 의해 유지되지 않습니다으로 변경합니다. 당신은

@Retention(RetentionPolicy.RUNTIME)