2 Stimmen

Concurrency Problem beim Plotten der Google Maps GeoCoder-Anfrage auf dem Google Maps Widget

Mein Programm hat im Wesentlichen 3 Schritte: 1) Abfrage des Geocoder-Objekts nach einigen Koordinaten und Speicherung in einer Sammlung 2) Senden der Ergebnisse an mein Hauptmodul zur Darstellung auf einer Karte 3) Plot auf einem Google Map Widget

Ich habe eine Requestor-Klasse für die Verarbeitung des Geocodings erstellt - diese Klasse verfügt über eine getResults()-Funktion, die ein ArrayList von Koordinaten an mein Hauptmodul zurückgibt, um auf der Karte dargestellt zu werden.
Wenn ich jedoch versuche, alle 3 Schritte innerhalb der Grenzen meiner onModuleLoad()-Methode auszuführen, stoße ich auf ein Nebenläufigkeitsproblem und erhalte null Ergebnisse aus dem Ergebnissatz. Ich habe dies mit einem Satz von 3 Schaltflächen (Anfrage, Ergebnisse abrufen und darstellen) zum Laufen gebracht, möchte jedoch, dass sie automatisch geladen werden, wenn das Modul geladen wird.
Ich vermute, dass dies etwas mit dem Auslösen von Ereignissen und dem Platzieren von Handlern an den richtigen Stellen zu tun hat; wenn das der Fall ist, geben Sie bitte ein konkretes Beispiel an, da ich versucht habe, ein gutes Tutorial zu EventHandlern mit einiger Schwierigkeit zu finden.

1voto

topchef Punkte 17965

Es scheint, dass die Requestor-Klasse asynchron aufgerufen wird. In diesem Fall können Sie EventBus verwenden (implementiert mit HandlerManager - GWT 1.6 oder später), um Ereignisse innerhalb von GWT zu senden und darauf zu abonnieren. So können Sie nach Erhalt des Ergebnisses vom Geocoding-Dienst ein Ereignis mit den Ergebnissen senden. Das Modul, das auf Ergebnisse wartet, abonniert dieses Ereignis mit EventBus.

Sie sollten sich vielleicht gwt-presenter und gwt-dispatch-Anwendungen für Implementierung und Beispiele ansehen.

0voto

BalusC Punkte 1034465

Ich habe das Problem mit einem Timer und einem Zeitplan von 5000 ms behoben.

Ich arbeite nicht mit GWT, daher kann ich nicht ins Detail gehen, aber es scheint, als ob du (oder es) separate Threads zum Verarbeiten verwendest. Wenn das der Fall ist, dann musst du im Grunde genommen den Thread(s) join, bevor du etwas mit ihren endgültigen Ergebnissen machst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X