2012-01-15 17 views
4

私はAdnroid 2.2 SDKを使用しており、実行するためにMultiUserChatクラス内に静的ブロックを取得できませんでした。私はそれを強制的にロードしようとしましたDalvikクラスローダーの謎

try 
{ 
    String qual = MultiUserChat.class.getName(); 
    ClassLoader.getSystemClassLoader().loadClass(qual); 

} catch (ClassNotFoundException e) { 

    e.printStackTrace(); 
} 

そして、それは常にキャッチブロックにヒットします。 'qual'はクラスの有効な名前を取得します...それは何でしょうか?

答えて

9

あなたのアプリには、ArrayListやActivityのようなフレームワーククラスと、FlashlightActivityのようなアプリケーションクラスが含まれています。フレームワーククラスは、システムクラスローダ(およびブートストラップクラスloadeR)によってロードされます。アプリケーションクラスはアプリケーションクラスローダーによってロードされます。

システムクラスローダは、システムクラスのみを参照できます。アプリケーションクラスパスは認識されず、アプリケーションクラスのロードには使用できません。これを行うには、アプリケーションクラスローダーを使用する必要があります。アプリケーションクラスローダへの参照を取得する最も簡単な方法は、アプリケーションクラスを経由する:

try { 
    String qual = MultiUserChat.class.getName(); 
    MyActivity.class.getClassLoader().loadClass(qual); 
} catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
} 
+0

'MyApplication.class'は、あなたの*アプリケーションではありませんシステム*の一部であるだけで任意のクラスを動作するはずです。 –

+1

@Jesse Wilson、Androidのクラスロードの実行方法に関する情報はどこにありますか?私は、Oracle JVMの 'system/bootstrap/application'法についてのあなたの言葉が正しいことを知っています。あなたはどんな参考文献も提供していただけますか? – CAMOBAP