Suite

Comment effacer JMapFrame avec plusieurs calques


Existe-t-il un moyen d'effacer un JMapFrame et toutes ses couches avant d'ouvrir un nouveau fichier ? Je rencontre actuellement une erreur (exception pas de trace de pile) lors de l'ouverture d'un fichier avec un fichier déjà ouvert auquel plusieurs couches ont été ajoutées (avec le volet des couches).

fileMenu.add(new SafeAction("Open File… ") { @Override public void action(ActionEvent e) lève Throwable { setJFCFilter("Shapefiles", "shp"); int returnVal = jfc.showOpenDialog(jframe); if (returnVal == JFileChooser.APPROVE_OPTION) { String pathname = jfc.getSelectedFile().getAbsolutePath(); URL shape = receiveURL(pathname); if (shape == null) { JOptionPane.showMessageDialog(jframe, "impossible de trouver le fichier "" + chemin + """, "Impossible de trouver le fichier", JOptionPane.ERROR_MESSAGE); } try { if (layers_size > 1) { for (int i = 0; i < layerList.size(); i++) { map. removeLayer(layerList.get(i)); } jframe.revalidate(); jframe.repaint(); shapeFile = new File(pathname); loadFile(shape); worldAf = jframe.getMapPane().getScreenToWorldTransform(); scaleRatio = new BigDecimal(worldAf.getScaleX()); // NullPointer - Exception 2 } else { shapeFile = new File(pathname); loadFile(shape); worldAf = jframe.getMapPane().getScreenToWorldTransform(); scaleRatio = new BigDecimal(worldAf .getScaleX()); } } catch (E xception ex) { Logger.getLogger(ShapefileExporter.class.getName()).log(Level.SEVERE, null, ex); } } } // Fin de l'action }); // Fin de l'écouteur

Fichier de chargement

// Charge le fichier de formes dans JMapFrame protected void loadFile (URL shape) lève IOException { try { FileDataStore store = FileDataStoreFinder.getDataStore (shape); featureSource = store.getFeatureSource(); ShapefileDataStore ds = new ShapefileDataStore(forme); FeatureSource fs = ds.getFeatureSource(); collection = fs.getFeatures(); FeatureArray = features(); map = new MapContent(); Style de style = SLD.createSimpleStyle(featureSource.getSchema()); Layer layer = new FeatureLayer(featureSource, style); map.addLayer(calque); layerList = new ArrayList(); layerList.add(calque); jframe.setMapContent(carte); // NullPointer - Exception 1 } catch (IOException ex) { Logger.getLogger(ShapefileExporter.class.getName()).log(Level.SEVERE, null, ex); } }

Après avoir exécuté ce morceau de code, j'en exécute d'autres pour ajouter une couche. Une fois cette deuxième couche ajoutée, si je réexécute ce code (en ouvrant un fichier différent), l'exception se produit.

De plus, je ne pense pas pouvoir publier le code complet car il s'agit de plus de 1000 lignes de code.

Exception 1

Exception dans le thread "AWT-EventQueue-0" java.lang.NullPointerException à org.geotools.swing.MapLayerTableCellRenderer.getListCellRendererComponent(MapLayerTableCellRenderer.java:259) à javax.swing.plaf.basic.BasicLayout1StateUI.update(MapLayerTableCellRenderer.java:259) ) sur javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(BasicListUI.java:1311) sur javax.swing.plaf.basic.BasicListUI.getPreferredSize(BasicListUI.java:578) sur javax.swing.JComponent.get.PreferredSize(BasicListUI.java:578) java:1661) à javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:790) à java.awt.Container.layout(Container.java:1503) à java.awt.Container.doLayout(Container.java:1492) à java.awt.Container.validateTree(Container.java:1688) à java.awt.Container.validate(Container.java:1623) à javax.swing.RepaintManager$2.run(RepaintManager.java:691) à javax.swing. RepaintManager$2.run(RepaintManager.java:689) sur java.security.AccessController.doPrivileged(Méthode native) sur java.security.ProtectionDomain$1.doInter sectionPrivilege(ProtectionDomain.java:76) sur javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:688) sur javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1676) sur java.awt.event.InvocationEvent.dispatch (InvocationEvent.java:312) à java.awt.EventQueue.dispatchEventImpl(EventQueue.java:745) à java.awt.EventQueue.access$300(EventQueue.java:103) à java.awt.EventQueue$3.run(EventQueue. java:706) sur java.awt.EventQueue$3.run(EventQueue.java:704) sur java.security.AccessController.doPrivileged(Native Method) sur java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) sur java .awt.EventQueue.dispatchEvent(EventQueue.java:715) sur java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) sur java.awt.EventDispatchThread.pumpEventsForFilter(Event.java.161Thread) sur java.awt.EventDispatchThread.pumpEventsForFilter.EventDispatch. pumpEventsForHierarchy(EventDispatchThread.java:150) sur java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:146) à java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) à java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Exception 2

31 décembre 2015 15:01:09 com.mycompany.shapefileexporter.mvn.ShapefileExporter$1 action GRAVE: null java.lang.NullPointerException at com.mycompany.shapefileexporter.mvn.ShapefileExporter$1.action(ShapefileExporter.java:249) à org.geotools.swing.action.SafeAction.actionPerformed(SafeAction.java:50) à javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) à javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) à javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) à javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) à javax.swing.AbstractButton.doClick(AbstractButton.java.swing:376) à javax.swing.AbstractButton.doClick(AbstractButton.java.swing:376). plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833) sur com.apple.laf.AquaMenuItemUI.doClick(AquaMenuItemUI.java:157) sur javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased.javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseUIItemed 877) sur java.awt.Component.processMouseEvent(Component.java:6516) sur javax.swing.JComponent.proce ssMouseEvent(JComponent.java:3321) à java.awt.Component.processEvent(Component.java:6281) à java.awt.Container.processEvent(Container.java:2229) à java.awt.Component.dispatchEventImpl(Component.java :4872) sur java.awt.Container.dispatchEventImpl(Container.java:2287) sur java.awt.Component.dispatchEvent(Component.java:4698) sur java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) sur java .awt.LightweightDispatcher.processMouseEvent(Container.java:4492) sur java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) sur java.awt.Container.dispatchEventImpl(Container.java:2273) sur java.awt.Window. dispatchEventImpl(Window.java:2719) à java.awt.Component.dispatchEvent(Component.java:4698) à java.awt.EventQueue.dispatchEventImpl(EventQueue.java:747) à java.awt.EventQueue.access$300(EventQueue. java:103) sur java.awt.EventQueue$3.run(EventQueue.java:706) sur java.awt.EventQueue$3.run(EventQueue.java:704) sur java.security.AccessController.doPrivileged(Native Method) sur jav a.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) sur java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) sur java.awt.EventQueue$4.run(EventQueue.java:720) sur java. awt.EventQueue$4.run(EventQueue.java:718) sur java.security.AccessController.doPrivileged(Méthode native) sur java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) sur java.awt.EventQueue.dispatchEvent( EventQueue.java:717) à java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) à java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) à java.awt.EventDispatch150 ) à java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) à java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) à java.awt.EventDispatchThread.run(EventDispatch91Thread.java)

Mettre à jour: J'ai suivi les conseils de @iant et je rencontre toujours des exceptions de pointeur nul, et les couches, après la suppression, sont toujours là (j'ai réussi à en supprimer une mais j'ai reçu plusieurs exceptions de pointeur nul).

Mise à jour : 30/12/15
Dans l'élément de menu de fichier ouvert (ci-dessus), en essayant de réinitialiser le JMapFrame, rien ne montre que le cadre clignote et reste le même.

jframe.setVisible(false); jframe.repaint(); initialiser(); jframe.repaint(); shapeFile = new File(chemin); loadFile(forme);

Cela devrait fonctionner (cela fonctionne très bien dans mon programme)

map.layers().clear();


Voir la vidéo: Solve Autocad Hardware Acceleration Grey Out After Reset Settings To Default (Octobre 2021).