1

私はこのエラーで立ち往生しています:

[DEBUG] [testgwt] - Rebinding org.stofkat.testgwt.client.GetTestsService
[INFO] [testgwt] - Module testgwt has been loaded
[ERROR] [testgwt] - Errors in 'generated://CB9089E742875E64C1F5E08E3E60A8B5        /org/stofkat/testgwt/shared/TestsWrapper_FieldSerializer.java'
[ERROR] [testgwt] - Line 9: The type TestsWrapper_FieldSerializer must implement the inherited abstract method TypeHandler.serial(SerializationStreamWriter, Object)
[ERROR] [testgwt] - Line 9: The type TestsWrapper_FieldSerializer must implement the inherited abstract method TypeHandler.deserial(SerializationStreamReader, Object)
[ERROR] [testgwt] - Line 36: Type mismatch: cannot convert from TestsWrapper to Object
[ERROR] [testgwt] - Line 40: Cannot cast from Object to TestsWrapper
[ERROR] [testgwt] - Line 44: Cannot cast from Object to TestsWrapper
[INFO] [testgwt] - See snapshot: C:\Users\Leejjon\AppData\Local\Temp\org.stofkat.testgwt.shared.TestsWrapper_FieldSerializer4210265464022362123.java

ここで2つのJavaプロジェクトの問題を切り分けることができました(EclipseからGWT Webアプリケーションとしてプロジェクトを実行し、ページのボタンを押すだけです)。

私がやろうとしているのは、レベルをXMLファイルからPOJOにロードできるlibgdxを使用してゲームを作成することです。次に、POJOをエンジンに渡すと、レベルが表示されます。そのライブラリはAndroidとデスクトップJavaの両方で機能するため、XML解析にSimpleXMLを使用しています。ただし、SimpleXMLフレームワークはjava.ioのクラスを使用するため、GWT(HTML5)バージョンのゲームでは使用できません。(GWTクライアント側のJavaコードはjavascriptにコンパイルされており、ファイルシステム上の任意のファイルから単純にデータを読み取ることは許可されていないため、これは許可されていません)。そこで、XMLファイルをGWTサーバーのPOJOにロードし、RPCを使用してクライアントに渡そうとします。

POJOクラスは、デスクトップ(LWJGL)、Android、およびHTML5(GWT)バージョンで使用されているJavaプロジェクトに含まれるため、GWT jarをそのプロジェクトに含めることができないため、POJOクラスはIsSerializableを実装できません。そこで、この他のスタックオーバーフロートピックでのGlennの回答に従い、元のPOJOを拡張してIsSerializableを実装する各POJOのラッパークラスを作成しました。

これがGWTのバグなのか、それとも間違っているのかを確認するのを手伝ってください。

4

1 に答える 1

1

IsSerializableは必須ではなくなりました。使用しているstackoverflowリファレンスは本当に古いです。https://developers.google.com/web-toolkit/doc/latest/tutorial/RPCにアクセスしてください

関連するセクション3.Javaオブジェクトのシリアル化

A type is serializable and can be used in a service interface if one of the following is true:

All primitive types (int, char, boolean, etc.) and their wrapper objects are serializable by default.
An array of serializable types is serializable by extension.
A class is serializable if it meets these three requirements:
It implements either Java Serializable or GWT IsSerializable interface, either directly, or because it derives from a superclass that does.
Its non-final, non-transient instance fields are themselves serializable, and
It has a default (zero argument) constructor with any access modifier (e.g. private Foo(){} will work)

あなたはあなたの解決策で軌道に乗っていないかもしれません。このアプローチでは、帯域幅と実行時のパフォーマンスの両方が犠牲になります。

于 2013-01-21T03:38:53.327 に答える