2013-03-19 4 views
1

.CLASS 파일을 읽고 그 코드를 실행하여 .CLASS 파일의 라이브러리로 사용할 수있는 Java 프로그램을 갖고 싶습니다. 가능한가요?자바 - 외부 코드 실행

+0

WTF? 그것이 가치가있는 것이면, .jar 파일은 여러개의 클래스들 (그리고 아마도 다른 것들)을 가진 .zip 파일 일뿐입니다. WinZip으로 .jar를 읽을 수 있습니다. – paulsm4

+0

.jar 파일이 실제로 Java 컴파일러가 아니면 실행할 수 없습니다. – OscarRyz

+0

[this] (http://docs.oracle.com/javase/7/docs/technotes/guides/javac/index.html), 특히 [this] (http://docs.oracle. com/javase/7/docs/api/javax/tools/package-summary.html # package_description). 필자는 사용하지 않았지만 런타임에 이러한 도구를 통해 .java 파일을 .class 파일로 컴파일 할 수 있음을 읽었습니다. – MadProgrammer

답변

3

java.lang.ClassLoader

외부 클래스를로드하는 데 도움이됩니다.

java.lang.reflect.Method

는로드 된 외부 클래스의 메소드를 호출하는 데 도움이 될 것입니다.

작은 예 : 난 아무것도 실행되지 않은

ArrayList<URL> urls = new ArrayList<URL>(); 
urls.add(new File("/path/to/your.class").toURI().toURL()); //can add several.. 

ClassLoader cl = new URLClassLoader(urls.toArray(new URL[urls.size()])); 
Class<?> c; 
c = Class.forName("your.class.name", false, cl); //now you have your class 

Method m = c.getMethod("main", String[].class); //now your have your method 
m.invoke(null, new Object[] { "argument1", "argument2" }); //now you "run that code" 

, 난 당신에게 당신을 도울 수있는 몇 가지 도구를 표시하는 데 썼다.

+0

이제 .class 파일이 주 프로그램의 메소드에 액세스하려고 시도한다고 가정 해 보겠습니다. 귀하의 코드에서 Class 객체가 이러한 메소드를 활용할 수 있습니까? – Confiqure

+0

좋은 방법이지만,이 경로는 .class 파일이 저장된 폴더 계층 구조의 루트를 가리켜 야합니다 (클래스 경로를 설정할 때와 같은 원칙). 이 경우에도 URL []을 바로 만드는 편이 쉽습니다 (하나의 요소 만 포함하므로). –

+0

자이로 (Gyro) : 나는 당신의 요지를 보았다고 생각하지만, 나는 당신이 하나 또는 몇몇 특정한 클래스를 어떻게 선택할 수 있는지 보여 주려고 노력했다. 당신이 가지고있는 목표에 따라 달라집니다. –