본문 바로가기

Programming Language/Java & Scala

Java reflection 사용시 에러 java.lang.ClassNotFoundException

반응형

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



반응형