0
我已經定義了一個類加載器,該類加載器應該從字節數組加載類,這是主類中的靜態類。我想調用一個使用匿名runnable的線程的方法,但我只會遇到一個錯誤。從類定製類加載器訪問匿名類
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at Hello.main(Hello.java:32)
Caused by: java.lang.IllegalAccessError: tried to access class HelloHack$1 from class HelloHack
at HelloHack.hello(HelloHack.java:14)
... 5 more
我跑的類是這樣的:
public class Hello {
private static class HelloHackClassLoader extends ClassLoader {
private static final byte[] HelloHackData = {(byte)-54,(byte)-2,(byte)-70,(byte)-66,(byte)0,(byte)0,(byte)0,(byte)51,(byte)0,(byte)31,(byte)10,(byte)0,(byte)8,(byte)0,(byte)22,(byte)7,(byte)0,(byte)23,(byte)7,(byte)0,(byte)24,(byte)10,(byte)0,(byte)3,(byte)0,(byte)22,(byte)10,(byte)0,(byte)2,(byte)0,(byte)25,(byte)10,(byte)0,(byte)2,(byte)0,(byte)26,(byte)7,(byte)0,(byte)27,(byte)7,(byte)0,(byte)28,(byte)1,(byte)0,(byte)12,(byte)73,(byte)110,(byte)110,(byte)101,(byte)114,(byte)67,(byte)108,(byte)97,(byte)115,(byte)115,(byte)101,(byte)115,(byte)1,(byte)0,(byte)6,(byte)60,(byte)105,(byte)110,(byte)105,(byte)116,(byte)62,(byte)1,(byte)0,(byte)3,(byte)40,(byte)41,(byte)86,(byte)1,(byte)0,(byte)4,(byte)67,(byte)111,(byte)100,(byte)101,(byte)1,(byte)0,(byte)15,(byte)76,(byte)105,(byte)110,(byte)101,(byte)78,(byte)117,(byte)109,(byte)98,(byte)101,(byte)114,(byte)84,(byte)97,(byte)98,(byte)108,(byte)101,(byte)1,(byte)0,(byte)18,(byte)76,(byte)111,(byte)99,(byte)97,(byte)108,(byte)86,(byte)97,(byte)114,(byte)105,(byte)97,(byte)98,(byte)108,(byte)101,(byte)84,(byte)97,(byte)98,(byte)108,(byte)101,(byte)1,(byte)0,(byte)4,(byte)116,(byte)104,(byte)105,(byte)115,(byte)1,(byte)0,(byte)11,(byte)76,(byte)72,(byte)101,(byte)108,(byte)108,(byte)111,(byte)72,(byte)97,(byte)99,(byte)107,(byte)59,(byte)1,(byte)0,(byte)5,(byte)104,(byte)101,(byte)108,(byte)108,(byte)111,(byte)1,(byte)0,(byte)1,(byte)116,(byte)1,(byte)0,(byte)18,(byte)76,(byte)106,(byte)97,(byte)118,(byte)97,(byte)47,(byte)108,(byte)97,(byte)110,(byte)103,(byte)47,(byte)84,(byte)104,(byte)114,(byte)101,(byte)97,(byte)100,(byte)59,(byte)1,(byte)0,(byte)10,(byte)83,(byte)111,(byte)117,(byte)114,(byte)99,(byte)101,(byte)70,(byte)105,(byte)108,(byte)101,(byte)1,(byte)0,(byte)14,(byte)72,(byte)101,(byte)108,(byte)108,(byte)111,(byte)72,(byte)97,(byte)99,(byte)107,(byte)46,(byte)106,(byte)97,(byte)118,(byte)97,(byte)12,(byte)0,(byte)10,(byte)0,(byte)11,(byte)1,(byte)0,(byte)16,(byte)106,(byte)97,(byte)118,(byte)97,(byte)47,(byte)108,(byte)97,(byte)110,(byte)103,(byte)47,(byte)84,(byte)104,(byte)114,(byte)101,(byte)97,(byte)100,(byte)1,(byte)0,(byte)11,(byte)72,(byte)101,(byte)108,(byte)108,(byte)111,(byte)72,(byte)97,(byte)99,(byte)107,(byte)36,(byte)49,(byte)12,(byte)0,(byte)10,(byte)0,(byte)29,(byte)12,(byte)0,(byte)30,(byte)0,(byte)11,(byte)1,(byte)0,(byte)9,(byte)72,(byte)101,(byte)108,(byte)108,(byte)111,(byte)72,(byte)97,(byte)99,(byte)107,(byte)1,(byte)0,(byte)16,(byte)106,(byte)97,(byte)118,(byte)97,(byte)47,(byte)108,(byte)97,(byte)110,(byte)103,(byte)47,(byte)79,(byte)98,(byte)106,(byte)101,(byte)99,(byte)116,(byte)1,(byte)0,(byte)23,(byte)40,(byte)76,(byte)106,(byte)97,(byte)118,(byte)97,(byte)47,(byte)108,(byte)97,(byte)110,(byte)103,(byte)47,(byte)82,(byte)117,(byte)110,(byte)110,(byte)97,(byte)98,(byte)108,(byte)101,(byte)59,(byte)41,(byte)86,(byte)1,(byte)0,(byte)5,(byte)115,(byte)116,(byte)97,(byte)114,(byte)116,(byte)0,(byte)33,(byte)0,(byte)7,(byte)0,(byte)8,(byte)0,(byte)0,(byte)0,(byte)0,(byte)0,(byte)2,(byte)0,(byte)1,(byte)0,(byte)10,(byte)0,(byte)11,(byte)0,(byte)1,(byte)0,(byte)12,(byte)0,(byte)0,(byte)0,(byte)47,(byte)0,(byte)1,(byte)0,(byte)1,(byte)0,(byte)0,(byte)0,(byte)5,(byte)42,(byte)-73,(byte)0,(byte)1,(byte)-79,(byte)0,(byte)0,(byte)0,(byte)2,(byte)0,(byte)13,(byte)0,(byte)0,(byte)0,(byte)6,(byte)0,(byte)1,(byte)0,(byte)0,(byte)0,(byte)11,(byte)0,(byte)14,(byte)0,(byte)0,(byte)0,(byte)12,(byte)0,(byte)1,(byte)0,(byte)0,(byte)0,(byte)5,(byte)0,(byte)15,(byte)0,(byte)16,(byte)0,(byte)0,(byte)0,(byte)9,(byte)0,(byte)17,(byte)0,(byte)11,(byte)0,(byte)1,(byte)0,(byte)12,(byte)0,(byte)0,(byte)0,(byte)70,(byte)0,(byte)4,(byte)0,(byte)1,(byte)0,(byte)0,(byte)0,(byte)20,(byte)-69,(byte)0,(byte)2,(byte)89,(byte)-69,(byte)0,(byte)3,(byte)89,(byte)-73,(byte)0,(byte)4,(byte)-73,(byte)0,(byte)5,(byte)75,(byte)42,(byte)-74,(byte)0,(byte)6,(byte)-79,(byte)0,(byte)0,(byte)0,(byte)2,(byte)0,(byte)13,(byte)0,(byte)0,(byte)0,(byte)14,(byte)0,(byte)3,(byte)0,(byte)0,(byte)0,(byte)14,(byte)0,(byte)15,(byte)0,(byte)19,(byte)0,(byte)19,(byte)0,(byte)20,(byte)0,(byte)14,(byte)0,(byte)0,(byte)0,(byte)12,(byte)0,(byte)1,(byte)0,(byte)15,(byte)0,(byte)5,(byte)0,(byte)18,(byte)0,(byte)19,(byte)0,(byte)0,(byte)0,(byte)2,(byte)0,(byte)20,(byte)0,(byte)0,(byte)0,(byte)2,(byte)0,(byte)21,(byte)0,(byte)9,(byte)0,(byte)0,(byte)0,(byte)10,(byte)0,(byte)1,(byte)0,(byte)3,(byte)0,(byte)0,(byte)0,(byte)0,(byte)0,(byte)8};
private static final Class HelloHack = new HelloHackClassLoader().defineClass("HelloHack", HelloHackData, 0, HelloHackData.length);
private static final byte[] HelloHack1Data = {(byte)-54,(byte)-2,(byte)-70,(byte)-66,(byte)0,(byte)0,(byte)0,(byte)51,(byte)0,(byte)39,(byte)10,(byte)0,(byte)6,(byte)0,(byte)22,(byte)9,(byte)0,(byte)23,(byte)0,(byte)24,(byte)8,(byte)0,(byte)25,(byte)10,(byte)0,(byte)26,(byte)0,(byte)27,(byte)7,(byte)0,(byte)28,(byte)7,(byte)0,(byte)29,(byte)7,(byte)0,(byte)30,(byte)1,(byte)0,(byte)6,(byte)60,(byte)105,(byte)110,(byte)105,(byte)116,(byte)62,(byte)1,(byte)0,(byte)3,(byte)40,(byte)41,(byte)86,(byte)1,(byte)0,(byte)4,(byte)67,(byte)111,(byte)100,(byte)101,(byte)1,(byte)0,(byte)15,(byte)76,(byte)105,(byte)110,(byte)101,(byte)78,(byte)117,(byte)109,(byte)98,(byte)101,(byte)114,(byte)84,(byte)97,(byte)98,(byte)108,(byte)101,(byte)1,(byte)0,(byte)18,(byte)76,(byte)111,(byte)99,(byte)97,(byte)108,(byte)86,(byte)97,(byte)114,(byte)105,(byte)97,(byte)98,(byte)108,(byte)101,(byte)84,(byte)97,(byte)98,(byte)108,(byte)101,(byte)1,(byte)0,(byte)4,(byte)116,(byte)104,(byte)105,(byte)115,(byte)1,(byte)0,(byte)12,(byte)73,(byte)110,(byte)110,(byte)101,(byte)114,(byte)67,(byte)108,(byte)97,(byte)115,(byte)115,(byte)101,(byte)115,(byte)1,(byte)0,(byte)13,(byte)76,(byte)72,(byte)101,(byte)108,(byte)108,(byte)111,(byte)72,(byte)97,(byte)99,(byte)107,(byte)36,(byte)49,(byte)59,(byte)1,(byte)0,(byte)3,(byte)114,(byte)117,(byte)110,(byte)1,(byte)0,(byte)10,(byte)83,(byte)111,(byte)117,(byte)114,(byte)99,(byte)101,(byte)70,(byte)105,(byte)108,(byte)101,(byte)1,(byte)0,(byte)14,(byte)72,(byte)101,(byte)108,(byte)108,(byte)111,(byte)72,(byte)97,(byte)99,(byte)107,(byte)46,(byte)106,(byte)97,(byte)118,(byte)97,(byte)1,(byte)0,(byte)15,(byte)69,(byte)110,(byte)99,(byte)108,(byte)111,(byte)115,(byte)105,(byte)110,(byte)103,(byte)77,(byte)101,(byte)116,(byte)104,(byte)111,(byte)100,(byte)7,(byte)0,(byte)31,(byte)12,(byte)0,(byte)32,(byte)0,(byte)9,(byte)12,(byte)0,(byte)8,(byte)0,(byte)9,(byte)7,(byte)0,(byte)33,(byte)12,(byte)0,(byte)34,(byte)0,(byte)35,(byte)1,(byte)0,(byte)5,(byte)72,(byte)101,(byte)108,(byte)108,(byte)111,(byte)7,(byte)0,(byte)36,(byte)12,(byte)0,(byte)37,(byte)0,(byte)38,(byte)1,(byte)0,(byte)11,(byte)72,(byte)101,(byte)108,(byte)108,(byte)111,(byte)72,(byte)97,(byte)99,(byte)107,(byte)36,(byte)49,(byte)1,(byte)0,(byte)16,(byte)106,(byte)97,(byte)118,(byte)97,(byte)47,(byte)108,(byte)97,(byte)110,(byte)103,(byte)47,(byte)79,(byte)98,(byte)106,(byte)101,(byte)99,(byte)116,(byte)1,(byte)0,(byte)18,(byte)106,(byte)97,(byte)118,(byte)97,(byte)47,(byte)108,(byte)97,(byte)110,(byte)103,(byte)47,(byte)82,(byte)117,(byte)110,(byte)110,(byte)97,(byte)98,(byte)108,(byte)101,(byte)1,(byte)0,(byte)9,(byte)72,(byte)101,(byte)108,(byte)108,(byte)111,(byte)72,(byte)97,(byte)99,(byte)107,(byte)1,(byte)0,(byte)5,(byte)104,(byte)101,(byte)108,(byte)108,(byte)111,(byte)1,(byte)0,(byte)16,(byte)106,(byte)97,(byte)118,(byte)97,(byte)47,(byte)108,(byte)97,(byte)110,(byte)103,(byte)47,(byte)83,(byte)121,(byte)115,(byte)116,(byte)101,(byte)109,(byte)1,(byte)0,(byte)3,(byte)111,(byte)117,(byte)116,(byte)1,(byte)0,(byte)21,(byte)76,(byte)106,(byte)97,(byte)118,(byte)97,(byte)47,(byte)105,(byte)111,(byte)47,(byte)80,(byte)114,(byte)105,(byte)110,(byte)116,(byte)83,(byte)116,(byte)114,(byte)101,(byte)97,(byte)109,(byte)59,(byte)1,(byte)0,(byte)19,(byte)106,(byte)97,(byte)118,(byte)97,(byte)47,(byte)105,(byte)111,(byte)47,(byte)80,(byte)114,(byte)105,(byte)110,(byte)116,(byte)83,(byte)116,(byte)114,(byte)101,(byte)97,(byte)109,(byte)1,(byte)0,(byte)7,(byte)112,(byte)114,(byte)105,(byte)110,(byte)116,(byte)108,(byte)110,(byte)1,(byte)0,(byte)21,(byte)40,(byte)76,(byte)106,(byte)97,(byte)118,(byte)97,(byte)47,(byte)108,(byte)97,(byte)110,(byte)103,(byte)47,(byte)83,(byte)116,(byte)114,(byte)105,(byte)110,(byte)103,(byte)59,(byte)41,(byte)86,(byte)0,(byte)48,(byte)0,(byte)5,(byte)0,(byte)6,(byte)0,(byte)1,(byte)0,(byte)7,(byte)0,(byte)0,(byte)0,(byte)2,(byte)0,(byte)0,(byte)0,(byte)8,(byte)0,(byte)9,(byte)0,(byte)1,(byte)0,(byte)10,(byte)0,(byte)0,(byte)0,(byte)47,(byte)0,(byte)1,(byte)0,(byte)1,(byte)0,(byte)0,(byte)0,(byte)5,(byte)42,(byte)-73,(byte)0,(byte)1,(byte)-79,(byte)0,(byte)0,(byte)0,(byte)2,(byte)0,(byte)11,(byte)0,(byte)0,(byte)0,(byte)6,(byte)0,(byte)1,(byte)0,(byte)0,(byte)0,(byte)14,(byte)0,(byte)12,(byte)0,(byte)0,(byte)0,(byte)12,(byte)0,(byte)1,(byte)0,(byte)0,(byte)0,(byte)5,(byte)0,(byte)13,(byte)0,(byte)15,(byte)0,(byte)0,(byte)0,(byte)1,(byte)0,(byte)16,(byte)0,(byte)9,(byte)0,(byte)1,(byte)0,(byte)10,(byte)0,(byte)0,(byte)0,(byte)55,(byte)0,(byte)2,(byte)0,(byte)1,(byte)0,(byte)0,(byte)0,(byte)9,(byte)-78,(byte)0,(byte)2,(byte)18,(byte)3,(byte)-74,(byte)0,(byte)4,(byte)-79,(byte)0,(byte)0,(byte)0,(byte)2,(byte)0,(byte)11,(byte)0,(byte)0,(byte)0,(byte)10,(byte)0,(byte)2,(byte)0,(byte)0,(byte)0,(byte)16,(byte)0,(byte)8,(byte)0,(byte)17,(byte)0,(byte)12,(byte)0,(byte)0,(byte)0,(byte)12,(byte)0,(byte)1,(byte)0,(byte)0,(byte)0,(byte)9,(byte)0,(byte)13,(byte)0,(byte)15,(byte)0,(byte)0,(byte)0,(byte)3,(byte)0,(byte)17,(byte)0,(byte)0,(byte)0,(byte)2,(byte)0,(byte)18,(byte)0,(byte)19,(byte)0,(byte)0,(byte)0,(byte)4,(byte)0,(byte)20,(byte)0,(byte)21,(byte)0,(byte)14,(byte)0,(byte)0,(byte)0,(byte)10,(byte)0,(byte)1,(byte)0,(byte)5,(byte)0,(byte)0,(byte)0,(byte)0,(byte)0,(byte)8};
private static final Class HelloHack1 = new HelloHackClassLoader().defineClass("HelloHack$1", HelloHack1Data, 0, HelloHack1Data.length);
public Class<?> findClass(String name) {
for(Field f:getClass().getDeclaredFields()) {
if(name.equals("HelloHack$1")) return HelloHack1;
}
return null;
}
}
public static final Class HelloHack = HelloHackClassLoader.HelloHack;
public static void main(String args[]) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
HelloHack.getDeclaredMethod("hello").invoke(null);
}
}
我失去了HelloHack source
,但Thread
與
Thread t = new Thread(new Runnable() {
public void run() {}
});
構建我不知道爲什麼會這樣。我用相同的類加載器加載了兩個類。
編輯我所用的相同類加載器的兩個不同的實例來加載的對象。
private static final HelloHackClassLoader instance = new HelloHackClassLoader();
不工作仍然相同的錯誤。 – nimsson
你可以檢查HelloHack1.class.getClassLoader()== HelloHack.class.getClassLoader(); –
看我的編輯;我想到了。 – nimsson