Руководство по быстрому запуску Geotools JFileDataStoreChooser.showOpenFile вызывает ошибку

#java #eclipse #swing #geotools

#java #eclipse #swing #geotools

Вопрос:

Я просматривал руководство по быстрому запуску Geotools с использованием Eclipse http://docs.geotools.org/latest/userguide/tutorial/quickstart/eclipse.html Я выполнил все шаги, и все шло хорошо, пока я не запустил класс Quickstart

Когда я запускаю класс Quickstart. Я получил эту ошибку

 Exception in thread "main" java.lang.NullPointerException
    at sun.awt.shell.Win32ShellFolder2.getFileSystemPath(Win32ShellFolder2.java:571)
    at sun.awt.shell.Win32ShellFolder2.access$400(Win32ShellFolder2.java:72)
    at sun.awt.shell.Win32ShellFolder2$2.call(Win32ShellFolder2.java:298)
    at sun.awt.shell.Win32ShellFolder2$2.call(Win32ShellFolder2.java:296)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at sun.awt.shell.Win32ShellFolderManager2$ComInvoker$3.run(Win32ShellFolderManager2.java:502)
    at java.lang.Thread.run(Thread.java:722)
  

И я обнаружил, что этот метод вызывает проблему JFileDataStoreChooser.showOpenFile

Я закомментировал все остальные строки, кроме той, в которой использовался метод выше, и все равно получил ту же ошибку. (ошибки нет, если я также прокомментировал эту строку)

 package org.geotools.tutorial;

import java.io.File;

import org.geotools.data.FileDataStore;
import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.map.FeatureLayer;
import org.geotools.map.Layer;
import org.geotools.map.MapContent;
import org.geotools.styling.SLD;
import org.geotools.styling.Style;
import org.geotools.swing.JMapFrame;
import org.geotools.swing.data.JFileDataStoreChooser;

/**
 * Prompts the user for a shapefile and displays the contents on the screen in a map frame.
 * <p>
 * This is the GeoTools Quickstart application used in documentationa and tutorials. *
 */
public class Quickstart {

    /**
     * GeoTools Quickstart demo application. Prompts the user for a shapefile and displays its
     * contents on the screen in a map frame
     */
    public static void main(String[] args) throws Exception {
        // display a data store file chooser dialog for shapefiles
          /*********This is the line *********/
          File file = JFileDataStoreChooser.showOpenFile("shp", null);
          /***********************************/

//        if (file == null) {
//            return;
//        }
//
//        FileDataStore store = FileDataStoreFinder.getDataStore(file);
//        SimpleFeatureSource featureSource = store.getFeatureSource();
//
//        // Create a map content and add our shapefile to it
//        MapContent map = new MapContent();
//        map.setTitle("Quickstart");
//        
//        Style style = SLD.createSimpleStyle(featureSource.getSchema());
//        Layer layer = new FeatureLayer(featureSource, style);
//        map.addLayer(layer);
//
//        // Now display the map
//        JMapFrame.showMap(map);
    }

}
  

Кроме того, в pom.xml Я пробовал версии 8.0-M2 и 8-SNAPSHOT. но не повезло…

У кого-нибудь есть идеи? Что-то не так с модулем geotools.swing?

Спасибо

Ответ №1:

Вероятно, это ошибка с sun.awt.shell.Win32ShellFolder2.getFileSystemPath методом, который запускает NPE.

Для его решения предлагается использовать JDK 1.6.0u21 или выше.

Проверьте в Google ключевые слова "NullPointerException sun.awt.shell.Win32ShellFolder2"

Комментарии:

1. Спасибо за ваш ответ. Я попробовал использовать эти ключевые слова в Google. В netbeans.org/bugzilla/show_bug.cgi?id=186615 , он сказал, что это исправлено в 6u21, в dbvis.com/forum/message.jspa?messageID=10866 , он сказал вернуться к версии 6u18. Я попробовал оба, все еще получил исключение NullPointerException, но другой stacktrace. Моя оригинальная версия — JDK 7

Ответ №2:

Я также пробовал руководство по быстрому запуску Geotools, и у меня возникла та же проблема.

Я, наконец, добавляю:

import org.geotools.data.shapefile.*;

и измените

FileDataStore store = FileDataStoreFinder.getDataStore(file);

Автор:

ShapefileDataStore store = new ShapefileDataStore(file.toURI().toURL());

Это не решает вопрос об исключении, но может быть альтернативой.