2011-01-23 5 views
1

によってロードされていない私は、カスタムクラスローダを書いて、i'haveは、クラスのほとんどがロードされているパラメータJavaのカスタムクラスローダ:いくつかのクラスは、私のクラスローダ

-Djava.system.class.loader=MyClassLoader 

を使用して、デフォルトのクラスローダーようにそれを設定私のクラスローダーによって、しかしいくつかのクラスは、なぜですか? このクラスは外部のjarファイルです。私はAが私のクラスローダによってロードされるクラスを期待するが、これは起こらないで、なぜ:

UPDATE ここでは一例

public class Main{ 
    public static void main(String[] args) { 
     try{ 
      // A simple class loader, ovveride loadClass 
      // method and print in stdout the name of the class loaded. 
      MyClassLoader classLoader=new MyClassLoader(MyClassLoader.class.getClassLoader()); 
      Class init=classLoader.loadClass("Initializer"); 
      Object instance=init.newInstance(); 
      init.getMethod("init").invoke(instance); 
     } 
     catch(Exception ex){ 
      ex.printStackTrace(); 
     } 
    } 
} 

public class A{ 

    public A() { 
     System.out.println("Im A"); 
    } 
} 

public class Initializer { 

    public void init() { 
     A a=new A(); 
    } 
} 

問題がありますか?

UPDATE

はとにかく、私はクラスコードを暗号化し、実行時にそれを解読したいbecouse、私のクラスローダを持つすべての私のクラスをロードします。 どうすれば、すべてのクラスに対してデフォルトのクラスローダーとしてクラスローダーを使用できますか?

ありがとうございました。

+0

あなたのCLによって読み込まれないクラスはありますか? – biziclop

+1

私の水晶球は、この特定のケースでClassNotFoundExceptionが発生したように輝きますが、私のjava woodoo人形はstacktraceなしで続行を拒否します:) – Osw

+0

あなたのクリスタル球は壊れています。私は例外もありません。私のクラスローダーによってロードされていません。 (私はクラスをロードするときにstdoutで印刷します) – blow

答えて

1

java.lang以下のものは、常にブートストラップクラスローダーによってロードされます。 http://en.wikipedia.org/wiki/Java_Classloaderから

JVMが開始されると、3クラス ローダーが使用されている[3] [4]:

  1. ブートストラップクラスローダ
  2. 拡張クラスローダ
  3. システムクラスローダー

ブートストラップクラスローダーは、 コアJavaライブラリ[5] (/ libディレクトリ)をロードします。この コアローダーは、 コアJVMの一部であり、ネイティブコードで記述されています。

拡張クラスローダは、拡張ディレクトリ (/ libに/内線または のjava.ext.dirsシステムプロパティで指定されている他の ディレクトリ)に コードをロードします。 sun.misc.Launcher $ ExtClassLoader クラスによって実装されています。

+0

私のクラスは私の外瓶です。このjarは私のクラスライブラリです。 – blow

+0

@ブロー、私はあなたの質問の最初の文を理解していません。 –

+0

どのような質問?? – blow

関連する問題