Приложение содержит pom.xml и два класса:
и два класса:
и два класса:
и два класса.
Код: Выделить всё
4.0.0
org.example
GeoToolsTest
1.0-SNAPSHOT
21
${version.java}
${version.java}
UTF-8
23.0.2
34-SNAPSHOT
true
org.geotools
gt-bom
${version.geotools}
pom
import
osgeo
OSGeo Release Repository
https://repo.osgeo.org/repository/release/
false
true
osgeo-snapshot
OSGeo Snapshot Repository
https://repo.osgeo.org/repository/snapshot/
true
false
src/main/config
${project.build.directory}
true
org.apache.maven.plugins
maven-compiler-plugin
3.14.0
${version.java}
org.openjfx
javafx-maven-plugin
0.0.8
org.example.Main
org.apache.maven.plugins
maven-jar-plugin
3.4.2
true
lib/
org.example.Starter
org.openjfx
javafx
${version.javafx}
pom
org.openjfx
javafx-controls
${version.javafx}
org.openjfx
javafx-swing
${version.javafx}
org.geotools
gt-shapefile
org.geotools
gt-swing
org.geotools
gt-api
Код: Выделить всё
package org.example;
public class Starter {
//Wrapper class
public static void main(String[] args) {
Main.main(args);
}
}
Код: Выделить всё
package org.example;
import javafx.application.Application;
import javafx.embed.swing.SwingNode;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import org.geotools.api.data.DataStore;
import org.geotools.api.data.DataStoreFinder;
import org.geotools.map.Layer;
import org.geotools.map.MapContent;
import org.geotools.swing.JMapPane;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("S-57 seachart with GeoTools");
SwingNode swingNode = new SwingNode();
createAndSetMapPane(swingNode);
BorderPane root = new BorderPane();
root.setCenter(swingNode);
Scene scene = new Scene(root, 800, 600);
primaryStage.setScene(scene);
primaryStage.show();
}
private void createAndSetMapPane(SwingNode swingNode) {
javafx.application.Platform.runLater(() -> {
MapContent mapContent = new MapContent();
mapContent.setTitle("S-57 Sea chart");
try {
File s57File = new File("PathToS57Files\\file.000");
Map params = new HashMap();
params.put("url", s57File.toURI().toURL());
DataStore dataStore = DataStoreFinder.getDataStore(params);
String typeName = dataStore.getTypeNames()[0];
Layer layer = new org.geotools.map.FeatureLayer(dataStore.getFeatureSource(typeName), null);
mapContent.addLayer(layer);
JMapPane mapPane = new JMapPane();
mapPane.setMapContent(mapContent);
swingNode.setContent(mapPane);
} catch (Exception e) {
e.printStackTrace();
}
});
}
public static void main(String[] args) {
launch(args);
}
}
< /code>
Я запускаю свое приложение со следующей команды: < /p>
java --module-path %FX-PATH% --add-modules javafx.controls,javafx.swing -jar GeoToolsTest-1.0-SNAPSHOT.jar Main
< /code>
Но в конечном итоге это следующее исключение: < /p>
Exception in thread "main" java.lang.NoClassDefFoundError: org/geotools/api/data/FeatureSource
at org.example.Starter.main(Starter.java:7)
Caused by: java.lang.ClassNotFoundException: org.geotools.api.data.FeatureSource
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
... 1 more
Подробнее здесь: https://stackoverflow.com/questions/797 ... and-javafx