[Gvsig_desarrolladores] addLayer y queryByRect

marcos boullón magán marcosboullon en gmail.com
Mar Ago 22 21:15:04 CEST 2006


Hola,

De verdad que lamento dar tanto la lata, pero es que a veces me
bloqueo con tonterías terriblemente simples y no veo la diferencia
entre mi código y el de las extensiones que sí funcionan.

Mi pregunta es "¿Qué pasos necesito dar para que una capa que mi
extensión carga desde una base de datos en la vista activa actual esté
disponible para ser consultada con las otras herramients del GIS?".

Porque ahora mismo he creado una extensión...
"public class QueryEspazosExtension extends Extension {"

... que crea un panel gráfico donde se puede lanzar una consulta SQL...
"public class QueryEspazosSelectionPanel extends JPanel implements
View, ViewListener, SingletonView {
  [...]
  jButton0.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
      lyr = (FLyrVect) getQueryLayer();
      lyr.setVisible(true);
      miMapControl.getMapContext().beginAtomicEvent();
      miMapControl.getMapContext().getLayers().addLayer(lyr);
      miMapControl.getMapContext().endAtomicEvent();
    }
  });"

... (en una tabla temporal) y la carga como capa...
"public FLayer getQueryLayer() {
  [...]
  return (FLyrVect) LayerFactory.createDBLayer(driver, "resultado", proj);"

Y puedo ver que la capa se introduce en la vista activa. Y puedo
cerrar el panel gráfico e incluso terminar la extensión y la capa
sigue en la vista activa... ¡¡Pero cada vez que intento seleccionar
sus elementos o acceder a los datos o algo (antes o después de cerrar
el panel) obtengo un java.lang.NullPointerException en
com.iver.cit.gvsig.fmap.[...].queryByRect!!

Es como si me faltara algún paso a la hora de introducir la nueva capa
en la vista (permanentemente), de manera que la conexión quede
registrada en alguna lista de conexiones de la vista y pueda ser
reconsultada en cualquier momento. O como si uno de los objetos
necesarios (¿tal vez un Connection o DBLayerDefinition o driver...?)
hubiera terminado y sido liberado (sin embargo he puesto todas las
variables importantes en la clase QueryEspazosExtension para no
liberarlas por error antes de salir, y nada).

¿Se os ocurre qué puede ser? No veo nada distinto de otras
extensiones. Por si ayuda, el trazado de errores cuando intento
seleccionar por rectángulo algo de mi capa es...

Layer resultado 208 milisecs.
Tiempo de dibujado:562 mseg. Memoria libre:4962 KB
DEBUG [AWT-EventQueue-1] (?:?) - Memoria total: 8053120
DEBUG [AWT-EventQueue-1] (?:?) - View Vista : Sin título - 0 activated
(callViewActivated)
DEBUG [AWT-EventQueue-1] (?:?) - Memoria total: 8466288
DEBUG [AWT-EventQueue-1] (?:?) - Ejecutando comando: SELRECT
DEBUG [AWT-EventQueue-1] (?:?) - Comand : SELRECT
DEBUG [AWT-EventQueue-1] (?:?) - Memoria total: 8914144
DEBUG [AWT-EventQueue-1] (?:?) - Memoria total: 8963568
 INFO [Thread-8] (?:?) - datasource closed
DEBUG [AWT-EventQueue-1] (?:?) - java.lang.NullPointerException
java.lang.NullPointerException
        at com.iver.cit.gvsig.fmap.operations.strategies.DBStrategy.queryByRect(Unknown
Source)
        at com.iver.cit.gvsig.fmap.operations.strategies.DefaultStrategy.queryByRect(Unknown
Source)
        at com.iver.cit.gvsig.fmap.layers.FLyrVect.queryByRect(Unknown Source)
        at com.iver.cit.gvsig.fmap.tools.RectangleSelectionListener.rectangle(Unknown
Source)
        at com.iver.cit.gvsig.gui.toolListeners.RectangleSelectListener.rectangle(Unknown
Source)
        at com.iver.cit.gvsig.fmap.tools.Behavior.RectangleBehavior.mouseReleased(Unknown
Source)
        at com.iver.cit.gvsig.fmap.tools.CompoundBehavior.mouseReleased(Unknown
Source)
        at com.iver.cit.gvsig.fmap.MapControl$MapToolListener.mouseReleased(Unknown
Source)
        at java.awt.Component.processMouseEvent(Component.java:5100)
        at java.awt.Component.processEvent(Component.java:4897)
        at java.awt.Container.processEvent(Container.java:1569)
        at java.awt.Component.dispatchEventImpl(Component.java:3615)
        at java.awt.Container.dispatchEventImpl(Container.java:1627)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
        at java.awt.Container.dispatchEventImpl(Container.java:1613)
        at java.awt.Window.dispatchEventImpl(Window.java:1606)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:480)
        at com.iver.andami.ui.AndamiEventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)

Gracias por adelantado,

Marcos

-- 
-- marcos boullón magán



Más información sobre la lista de distribución gvSIG_desarrolladores