시스템의 특정 구현에 따라 필요한 리소스에 대해 다른 클래스를로드하는 스레드가 있습니다. 내 구현은 Android에 있고 구현에 필요한 특정 클래스를 반환하는 클래스가 있습니다. 클래스를 잘로드 할 수있을 것 같지만 내 주 스레드에서 개체에 할당하려고하면 ClassCastException이 발생합니다. 여기에 조각입니다 : 내 메인 스레드에서Android에서 클래스를 동적으로로드하는 동안 ClassCastException이 발생했습니다.
, 내가 할 : 나에게이 스택 트레이스 제공
try {
grammarProcessor = config.loadObject(GrammarProcessor.class);
:
E/AndroidRuntime(6682): FATAL EXCEPTION: JVoiceXmlMain
E/AndroidRuntime(6682): java.lang.ClassCastException: org.jvoicexml.android.JVoiceXmlGrammarProcessor
E/AndroidRuntime(6682): at org.jvoicexml.JVoiceXmlMain.run(JVoiceXmlMain.java:321)
GrammarProcessor
는 인터페이스와 JVoiceXmlGrammarProcessor
입니다 내가로드 클래스이며, 해당 인터페이스를 구현합니다. 로딩 코드는 다음과 같습니다 :
디버깅 할 때로드 메소드에서 반환되는 내용을 확인하고 ID 번호가있는 객체인지 확인합니다. 클릭하면 org.jvoicexm[email protected]
이 표시되고 드롭 다운에는 JVoiceXmlGrammarProcessor
에있는 두 개의 비공개 필드가 표시되어 잘로드 된 것 같습니다. 어떤 아이디어?
grammarProcessor 변수의 클래스는 GrammarProcessor.class입니까? –
새로운'PathClassLoader'를 인스턴스화하는 대신'ClassLoader.getSystemClassLoader()'를 사용하려 했습니까? –
@Marakatu 잠깐, 나는 슈퍼 혼란스러워. 정확히 무엇을하려는 거니? Class > 개체를 이름순으로 반환 하시겠습니까? 'Class.forName'을 사용하십시오. 안드로이드에서는 별도의 .dex 파일에서 클래스를로드하려면 새로운 클래스 로더 만 사용해야합니다 ([좋은 기사가 있습니다] (http://android-developers.blogspot.co.uk/2011/07/custom -class-loading-in-dalvik.html)). 당신이하려는 것을 설명하십시오. 편집 : 당신은 같은 apk 또는 다른 하나에서로드 중입니까? – Delyan