Java reflection은 강력하고 Java를 더욱 효과적으로 쓸 수 있게 하는 무기이지만 아래와 같은 에러를 볼 때도 있다.
java.lang.ClassNotFoundException: XXXXXX
아래 예제를 통해 어떻게 해결하는지 알아보자.
Daemon.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package com.reflection.example; import java.lang.reflect.Method; public class Daemon { public static void main(String[] args) throws Exception { try { Class c = Class.forName(args[0]); Method m[] = c.getDeclaredMethods(); for (int i = 0; i < m.length; i++) System.out.println(m[i].toString()); } catch (Throwable e) { System.err.println(e); } } } | cs |
FirstJob.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package com.reflection.example.job; import java.lang.reflect.Method; public class FirstJob { private int number; public void setNumber(int number){ this.number=number; } public printNumber(){ System.out.println("number is :"+number); } } | cs |
start java(jar로 압축했을 경우)
1 | Anderson-computer $ java -jar Daemon.jar FirstJob | cs |
reflection을 위와 같은 코드로 쓰고 실행했을 때 아래와 같은 에러 메시지가 뜬다.
java.lang.ClassNotFoundException: XXXXXX
위 오류가 나타나는 이유는 Class파일의 위치 때문이다. 그러므로 아래와 같이 두가지 방법으로 해결이 가능하다.
방법1 : Daemon.java 수정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package com.reflection.example; import java.lang.reflect.Method; public class Daemon { public static void main(String[] args) throws Exception { try { Class c = Class.forName("com.reflection.example.job."+args[0]); Method m[] = c.getDeclaredMethods(); for (int i = 0; i < m.length; i++) System.out.println(m[i].toString()); } catch (Throwable e) { System.err.println(e); } } } | cs |
방법2 : start java시에 package경로로 불러오기
1 | Anderson-computer $ java -jar Daemon.jar com.reflection.example.job.firstJob | cs |
End of Document
반응형
'Programming Language > Java & Scala' 카테고리의 다른 글
예제로 알아보는 스칼라에서 Option monad (695) | 2018.10.31 |
---|---|
Intellij에서 scala와 sbt를 사용시 반드시 알아야할 3가지 (1083) | 2018.10.16 |
[Groovy]배열 종류 및 사용법 (69) | 2018.03.12 |
[Groovy]변수 선언하기 및 변수 종류 (26) | 2018.03.12 |
[Groovy]설치하고 helloworld 출력하기 (44) | 2018.03.12 |
Java의 축복 Lombok 소개 - gradle 적용시키기 (0) | 2017.06.18 |