2012-10-08 5 views
2

내가 자바에서 최고라고 말하지 말고 시작하자. 정말 간단한 것을 놓친 것 같다. ...이 클래스 로더 문제를 어떻게 해결할 수 있습니까?

나는 플러그인 시스템에서 일하고 있으며 모든 것이 완벽하게 작동하지만, 실제로 애플릿을 그 외부로 실행합니다.

.class 디렉토리에서 파일을로드하고 실행하려고하는데 왜 작동하지 않는지 알기 때문에 해결 방법을 모릅니다.

문제는 이클립스 클래스 경로에 애플릿 자체를 참조하고 있지만,이 일식의 외부 클래스 경로에서 참조되지 않는 것 그리고 내가 단지를 통해 그것을 실행할 수 있습니다, -cp 또는 -classpath에 액세스 할 수없는 것입니다 고정 클래스 경로로 항아리를로드하도록 설계된 실행기.

이 문제를 어떻게 해결할 수 있을지에 대한 아이디어가 있으십니까?

로더 코드 :

final ClassLoader loader = new URLClassLoader(new URL[] { new File("C:/Plugin/Directory/").toURI().toURL() }); 
final Class<?> c = loader.loadClass("PluginFile"); 
Object s = c.newInstance(); 
s.getClass().getMethod("onLoad").invoke(s); 

플러그인 코드 :이 문제는 이제 일주일 동안 벽을 날 운전하고있다

import net.plugintest.pluginsystem.*; 

public class PluginFile extends ClientPlugin 
{ 
    private String Author = "Plugin Author"; 
    private String Description = "Plugin Description" 
    private Player p = new Player(); 

    @Override 
    public void onLoad() 
    { 
     p.talk("Testing"); 
    } 
} 

, 내가 무엇을 해야할지하지 않습니다. :/

+0

URLClassLoader의 사용 /stackoverflow.com/questions/252893/how-do-you-change-the-classpath-within-java –

+0

예외는 무엇입니까? –

+0

'java.lang.ClassNotFoundException : net.plugintest.pluginsystem.ClientPlugin' – user1728017

답변

2

잘 모르겠어요하지만 당신이 만든 클래스 로더 예에 부모 클래스 로더를 제공하십시오 : HTTP :/당신이 당신의 클래스 경로도 참조에서 원하는 클래스를로드

ClassLoader parent = Thread.currentThread().getContextClassLoader(); 
// or 
// ClassLoader parent = getClass().getClassLoader(); 
ClassLoader loader = new URLClassLoader(new URL[] { new File("C:/Plugin/Directory/").toURI().toURL() }, parent); 
+0

아니, 여전히'java.lang.ClassNotFoundException : net.plugintest.pluginsystem.ClientPlugin' :/ – user1728017

+0

아아. 귀하의 답변은'Thread.currentThread(). getContextClassLoader()'대신'ClientPlugin.class.getClassLoader()'를 사용하여 제 문제를 해결했습니다. :피 – user1728017