RE: [Gvsig_desarrolladores] Ayuda con la siguiente excepción

Carlos Sánchez Periñán csanchez en prodevelop.es
Lun Jun 16 10:21:50 CEST 2008


Hola Leonid,

Esa excepción se puede deber desde a que tienes alguna geometría vacía dentro de la capa, que la geometría donde salta el error sea una multigeometría y no estés recorriendo cada geometría interior, también te puede fallar la carga del "driver" vectorial que es el que te devuelve el shape. Faltaría ver la capa que cargas con la selección que haces para probar tu extensión. Añado parte del código para dibujar de otro color las geometrías seleccionadas dentro de una vista. 

 

IGeometry ig = null;

                               Rectangle2D bb = null;

                               

                               BitSet sel = getSelectionSupport().getSelection();                                                              //DEVUELVE EL BITSET CON LOS INDICES DE LOS ELEMENTOS SELECCIONADOS

                               AffineTransform aft = _vp.getAffineTransform();                                                              //TRANSFORMACIÖN AFFIN DE LA VISTA

                               try {

                                               for (int i = sel.nextSetBit(0); i >= 0; i = sel.nextSetBit(i+1)) {

                                                               bb = lyrVect.getSource().getShapeBounds(i);                                    //DEVUELVE LOS LÍMITES DE LA CAPA 

                                                               if (Utils.rectanglesItersect(bb, _vp.getAdjustedExtent())) {              //COMPRUEBA SI LAS FRONTERAS DE LA CAPA Y DE LA VISTA INTERSECTAN 

                                                                              ig = lyrVect.getSource().getShape(i);

                                                                              if (ig == null) {

                                                                                              logger.debug("ig es NULL: " + i);                           //PUEDE OCURRIR QUE TU GEOMETRIA SEA VACIA

                                                                                              continue;

                                                                              }

                                                               }

                                               }

                               }catch (Exception e) {

                                               throw new ExtnsionException(e.getMessage());

                               }

 

 

Como ves tu código parece estar correcto y es muy parecido a lo que se utiliza para dibujar las geometrías seleccionadas, es por eso que la excepción se puede deber a la capa que cargas para probar el código.

Tendrás que "debuguear" el código para ver si la capa, las geometrías, o la frontera de cualquiera de estas se hace nula, o enviar la capa de prueba que estas usando.

Espero haberte ayudado algo.

 

 

Carlos Sánchez Periñán

Equipo desarrollo GIS

Prodevelop S.L.

Tel :  963510612

E-mail : csanchez en prodevelop.es

________________________________

De: gvsig_desarrolladores-bounces en runas.cap.gva.es [mailto:gvsig_desarrolladores-bounces en runas.cap.gva.es] En nombre de Leonid Mendoza Robaina
Enviado el: viernes, 13 de junio de 2008 20:22
Para: gvsig_desarrolladores en runas.cap.gva.es
Asunto: [Gvsig_desarrolladores] Ayuda con la siguiente excepción

 

 

Hola a todos los desarrolladores:

Estoy programando una extensión con el objetivo de imprimir en pantalla las coordenadas de los rectángulos (en ingles a esto se le conoce como Bounding Box Region) que contienen las geometrías seleccionadas por el usuario en una capa vectorial que ha sido cargada en una vista.
El código de la extensión es el siguiente:

public void execute(String actionCommand) {
        if (actionCommand.equals("1_SET_ANNOTATION")) {
                printRect();
        }
}
private void printRect(){
try {
  View vista = (View) PluginServices.getMDIManager().getActiveWindow();
  MapControl mapCtrl = vista.getMapControl();
       
  FLayer[] actives = mapCtrl.getMapContext().getLayers().getActives();
  for (int i=0; i < actives.length; i++)
  {
    System.out.println("capa "+ i);
    if (actives[i] instanceof FLyrVect ){
      FLyrVect lyrVect = (FLyrVect) actives[i];
        FBitSet sel = lyrVect.getRecordset().getSelection();
        for(int j = sel.nextSetBit(0); j >= 0; j = sel.nextSetBit(j+1)){
          IGeometry ig = lyrVect.getSource().getShape(j);//la execption se lanza en esta linea 
          if(ig != null){
            Rectangle2D rect = ig.getBounds2D();
                //Imprimir coordenadas del rectángulo.                                 
                                                       
          }
        }
    }
  }
}catch (DriverException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}catch (DriverIOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}
}

En ejecución se lanza NullPointerException en la llamada al método getShape(j) en la línea siguiente:
IGeometry ig = lyrVect.getSource().getShape(j);

La traza de la excepción es la siguiente:
java.lang.NullPointerException
        at com.iver.cit.gvsig.fmap.drivers.shp.IndexedShpDriver.getPositionForRecord(Unknown Source)
        at com.iver.cit.gvsig.fmap.drivers.shp.IndexedShpDriver.getShape(Unknown Source)
        at com.iver.cit.gvsig.fmap.layers.VectorialFileAdapter.getShape(Unknown Source)
        at com.iver.cit.gvsig.semanticAnnotation.SetAnnotationExtension.printRect(SetAnnotationExtension.java:81)
        at com.iver.cit.gvsig.semanticAnnotation.SetAnnotationExtension.execute(SetAnnotationExtension.java:25)
        at com.iver.andami.plugins.ExtensionDecorator.execute(ExtensionDecorator.java:88)
        at com.iver.andami.ui.mdiFrame.MDIFrame.actionPerformed(MDIFrame.java:616)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
        at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:231)
        at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:231)
        at java.awt.Component.processMouseEvent(Component.java:5488)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
        at java.awt.Component.processEvent(Component.java:5253)
        at java.awt.Container.processEvent(Container.java:1966)
        at java.awt.Component.dispatchEventImpl(Component.java:3955)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
        at java.awt.Container.dispatchEventImpl(Container.java:2010)
        at java.awt.Window.dispatchEventImpl(Window.java:1766)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at com.iver.andami.ui.AndamiEventQueue.dispatchEvent(AndamiEventQueue.java:58)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)


Por favor, alguien pudiera ayudarme a saber porqué se lanza la excepción y a corregir el código.
Muchas gracias a todos,

Leonid Mendoza
Estudiante de Ciencia de La Computación
Universidad de La Habana.

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://runas.cap.gva.es/pipermail/gvsig_desarrolladores/attachments/20080616/9f1ae856/attachment.htm


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