2012-11-21 75 views
0

我想告訴JVM使用我的定製ClassLoader爲默認的ClassLoader定義自定義類加載器系統

這是在VM參數我用它來接我的班:

-Djava.system.class.loader=JarClassLoader 

,這是錯誤我得到

Error occurred during initialization of VM 
java.lang.Error: java.lang.NoSuchMethodException: JarClassLoader.<init>(java.lang.ClassLoader) 
    at java.lang.ClassLoader.initSystemClassLoader(Unknown Source) 
    at java.lang.ClassLoader.getSystemClassLoader(Unknown Source) 
Caused by: java.lang.NoSuchMethodException: JarClassLoader.<init>(java.lang.ClassLoader) 
    at java.lang.Class.getConstructor0(Unknown Source) 
    at java.lang.Class.getDeclaredConstructor(Unknown Source) 
    at java.lang.SystemClassLoaderAction.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.lang.ClassLoader.initSystemClassLoader(Unknown Source) 
    at java.lang.ClassLoader.getSystemClassLoader(Unknown Source) 

我必須定義一個特定的方法或我使用錯誤的參數嗎?

+0

是您的類加載器真的在默認包?它是否從ClassLoader擴展並覆蓋所有必需的方法? – Perception

+0

實際上,這是一個由其他人定義的類加載器,用於檢查我使用的可選參數是否正常工作。你有什麼資源可以閱讀哪些是「所有必需的方法」? – Chobeat

+0

你可以閱讀[this](http://www.javablogging.com/java-classloader-2-write-your-own-classloader/)教程,它非常有幫助。 – Perception

回答

1

定製ClassLoader

public class CustomClassLoader extends ClassLoader{ 

    public CustomClassLoader(ClassLoader classLoader) { 
     super(classLoader); 
    } 

    @Override 
    public Class<?> loadClass(String name) throws ClassNotFoundException { 
     System.out.println("Loading class :" + name); 
     return super.loadClass(name); 
    } 
} 

主類

public class Main { 

    public static void main(String[] args) { 
     System.out.println("Starting main"); 
    } 
} 

VM參數:-Djava.system.class.loader=CustomClassLoader

所有的類都在默認包,並將其成功執行。

輸出:
加載類:主要
起主要

+0

試過,我得到:虛擬機初始化期間發生錯誤 java.lang.IllegalStateException:遞歸調用 –