[Gvsig_desarrolladores] setSelection desde un IMonitorableTask
César Martínez Izquierdo
cesar.martinez en iver.es
Mar Mayo 15 08:57:33 CEST 2007
Alvaro Zabala wrote:
> Ahora mismo intuyo la causa, pero no la solución:
>
> cuando visualizas la capa vectorial con el componente de GUI table, éste
> automáticamente se registra como listener de los eventos de selección
> del recordset de la capa, de forma que cuando cambie una selección ésta
> se refleje en el componente gráfico.
>
> Ahora bien, como IMonitorableTask corre en un hilo aparte, cuando desde
> esta tarea tratas de cambiar la selección, el listener tratará de que
> esto se refleje en el componente de Swing....y me parece que los
> componentes Swing solo pueden ser accedidos desde el event-dispatcher
> thread.
>
> De esto se habla en este enlace:
> http://java.sun.com/products/jfc/tsc/articles/threads/threads3.html
>
> No obstante, no tengo muy claro como esquivar este problema con el API
> de ITask de gvSIG....(que usa SwingWorker, pero una versión anterior a
> la del artículo).
> Habrá que investigarlo.
>
> Un saludo.
Yo lo estuve investigando un día, pero no lo hemos probado todavía.
Basta con añadir un método finished() a la IMonitorableTask; añadir un
método abstracto del mismo nombre al SwingWorker:
public abstract void finished();
Y en las implementaciones del Worker, habría que hacer una llamada ocmo
esta:
public void finished() {
task.finished():
}
Si bien tenemos varias implementaciones del Worker, y habría que ver
cómo encaja en cada una (algunas tienen varias tasks).
El método finished se llamara automáticamente *desde el Event Dispatch
Thread* al finalizar la BackgroundTask, así que evitaremos el problema
de Diego.
He subido en el HEAD unos cambios que reflejan esto, faltaría rellenar
correctamente el comportamiento en MonitorableDecorableMainFirst,
MonitorableTaskQueue y PipeTask; todos ellos implementan IMonitorableTask.
Saludos,
--
César Martínez Izquierdo
Equipo de desarrollo gvSIG
http://www.gvsig.gva.es
IVER T.I.
C/ Salamanca 50
46005 Valencia - Spain
http://www.iver.es
Más información sobre la lista de distribución gvSIG_desarrolladores