2016-08-19 89 views
-1

我有一個服務器項目,我需要通過服務器將對象從一臺計算機發送到另一臺計算機。該對象是一個SpecificGame,它擴展了Game。服務器知道它收到的對象是Game類型的,但無法訪問SpecificGame或任何其他擴展Game的類。服務器然後將這個對象傳遞給另一臺計算機,並且一切都很好。Java ClassNotFoundException現有類的子類

我有多個擴展遊戲類(我正在使用這個服務器的幾個電腦遊戲),我不斷修改和添加這些類,而不修改遊戲本身。

然而,最近,即使SpecificGame擴展了服務器可以識別的Game,服務器也會爲SpecificGame拋出ClassNotFoundException。如果我在eclipse中將服務器導出爲與SpecificGame相同的項目文件夾,但它工作正常,但這意味着我必須導出jar並在每次修改任何擴展了Game並通過服務器的服務器時重新啓動服務器。

我一直在使用ObjectInputStream.readObject()方法來讀取擴展遊戲的類,這已經引發了異常。

請幫我弄清楚可能是什麼原因引起的。

不幸的是,我無法在線發佈代碼細節。

謝謝!

+0

你在閱讀SpecificGame後如何投入? '(遊戲)ObjectInputStream.readObject()'或'(SpecificGame)ObjectInputStream.readObject()'? – corpico

+0

我使用了(遊戲),這樣我就可以使用任何類,包括SpecificGame,它將Game與服務器 – Waiwera

回答

0

當您將新類添加到通信的一端時,您當然也需要將相同的類添加到另一端。這意味着,你將不得不重新部署這些類到服務器,並重新啓動它。

否則就像在你的情況下,服務器獲取的信息重建一些序列化信息的SpecificGame對象,但他應該怎麼做,而不知道SpecificGame是什麼?