Проблемы при запуске приложения с Java21, Geotools и JavafxJAVA

Программисты JAVA общаются здесь
Anonymous
Проблемы при запуске приложения с Java21, Geotools и Javafx

Сообщение Anonymous »

Моя цель-создать приложение, которое использует Java 21.0.7 (openjdk), Javafx 23.0.2 и Geotools 34-Snapshot , чтобы показать S57 Sea Harts. Fx-path = c: \ git \ openjfx-23.0.2_windows-x64_bin-sdk \ javafx-sdk-23.0.2 \ lib .
Приложение содержит pom.xml и два класса:

Код: Выделить всё

    
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
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




Класс org.example.starter (который действует как класс обертки):

Код: Выделить всё

package org.example;
public class Starter {
//Wrapper class
public static void main(String[] args) {
Main.main(args);
}
}
и файл: org.example.main :

Код: Выделить всё

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

Может ли кто-нибудь объяснить, что отсутствует или неправильно? /> [*] Даже если я удалю gt-bom -pattern (который вводится версией 34-snapshot ) и устанавливает все геотул -dependences в последнюю стабильную версию 33.2 .



Подробнее здесь: https://stackoverflow.com/questions/797 ... and-javafx

Вернуться в «JAVA»