1

我遇到了一個問題,當Android上的Mina客戶端試圖對一個對象進行反序列化時,發生了ClassNotFoundException。堆棧如下所示:Android:Mina客戶端ClassNotFoundException

04-13 01:56:21.521: 
04-13 01:56:21.521: D/RegisterTask(299): Caused by: org.apache.mina.filter.codec.ProtocolDecoderException: java.lang.ClassNotFoundException: com.geoxy.message.agent.user.RegisterResponse (Hexdump: 12 00 00 2A 00 00 00 DA 12 04 00 02 00 00 00 D2 AC ED 00 05 73 72 01 00 2D 63 6F 6D 2E 67 65 6F 78 79 2E 6D 65 73 73 61 67 65 2E 61 67 65 6E 74 2E 75 73 65 72 2E 52 65 67 69 73 74 65 72 52 65 73 70 6F 6E 73 65 78 72 01 00 1D 63 6F 6D 2E 67 65 6F 78 79 2E 63 6F 6D 6D 6F 6E 2E 52 65 73 70 6F 6E 73 65 42 61 73 65 78 72 01 00 1C 63 6F 6D 2E 67 65 6F 78 79 2E 63 6F 6D 6D 6F 6E 2E 4D 65 73 73 61 67 65 42 61 73 65 78 70 12 04 00 02 73 72 01 00 2D 63 6F 6D 2E 67 65 6F 78 79 2E 63 6F 6D 6D 6F 6E 2E 4D 65 73 73 61 67 65 42 61 73 65 24 4D 65 73 73 61 67 65 53 69 67 6E 61 74 75 72 65 78 70 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 71 00 7E 00 03 00 70 00 00 00 00 00 00 00 03) 

04-13 01:56:21.521: D/RegisterTask(299): at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:251) 
04-13 01:56:21.521: D/RegisterTask(299): at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434) 
04-13 01:56:21.521: D/RegisterTask(299): at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$5(DefaultIoFilterChain.java:429) 
04-13 01:56:21.521: D/RegisterTask(299): at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796) 
04-13 01:56:21.521: D/RegisterTask(299): at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:119) 
04-13 01:56:21.521: D/RegisterTask(299): at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434) 
04-13 01:56:21.521: D/RegisterTask(299): at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:426) 
04-13 01:56:21.521: D/RegisterTask(299): at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:715) 
04-13 01:56:21.521: D/RegisterTask(299): at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:668) 
04-13 01:56:21.521: D/RegisterTask(299): at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:657) 
04-13 01:56:21.521: D/RegisterTask(299): at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$9(AbstractPollingIoProcessor.java:654) 
04-13 01:56:21.521: D/RegisterTask(299): at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1141) 
04-13 01:56:21.521: D/RegisterTask(299): at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64) 

但我不明白,缺少類「com.geoxy.message.agent.user.RegisterResponse」實際上是包含在message.jar,我已經把項目構建路徑下的message.jar。 (並且服務器也使用相同的message.jar來序列化該類)。

而且我也檢查了項目.classpath,它包含message.jar。

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/> 
    <classpathentry kind="src" path="src"/> 
    <classpathentry kind="src" path="gen"/> 
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/> 
    <classpathentry kind="lib" path="libs/dumpcatcher.jar"/> 
    <classpathentry kind="lib" path="libs/common-0.1.jar"/> 
    <classpathentry kind="lib" path="libs/log4j-1.2.16.jar"/> 
    <classpathentry kind="lib" path="libs/slf4j-android-1.6.1-RC1.jar"/> 
    <classpathentry kind="lib" path="libs/message-0.1.jar"/> <!---here is it.--> 
    <classpathentry kind="lib" path="libs/mina-core-2.0.4.jar"/> 
    <classpathentry kind="output" path="bin/classes"/> 
</classpath> 

請幫忙,有沒有其他原因導致ClassNotFoundException?非常感謝你。 我也把在這篇文章的一些信息:Run (synchronize) mina client on Android, how to resolve ClassNotFoundException

+1

[看這裏](http://stackoverflow.com/a/9833655/420015) – adneal 2012-04-13 03:03:35

回答

0

我覺得在Message.jar您嘗試訪問「」 egisterResponse」之類的擴展活動,在這些情況下,您必須在manifeast文件中添加這些活動。下面。就像

<activity android:name="com.geoxy.message.agent.user.RegisterResponse" /> 

還要記住,如果我們的任何外部JAR的具有延伸活動類新那麼這種活動必須在我們的manifeast文件中聲明過。

試試這可能會幫助你。

或嘗試將您的jar文件放置在項目的libs文件夾中,然後將其鏈接並嘗試。

+0

Message.jar不是由android項目構建的,它是一個用maven構建的java庫。所以它沒有擴展活動。 Message.jar用於android項目和我的服務器項目(在PC上運行)。我也嘗試過「將你的jar文件放在項目的libs文件夾中,然後將其鏈接起來」。謝謝。 – weifang 2012-04-13 06:16:45