Suite

Mon programme java osm2po se compile mais génère une erreur d'exécution

Mon programme java osm2po se compile mais génère une erreur d'exécution


J'ai besoin de distances routières et j'essaie d'utiliser osm2po pour le faire.

Après avoir téléchargé les fichiers OSM et les avoir convertis au format gph, à l'aide du programme osm2po, je commence au tout début avec le programme java très simple suivant :

importer java.io.File; importer java.util.Arrays ; importer de.cm.osm2po.logging.Log ; importer de.cm.osm2po.logging.Log2poConsoleWriter ; importer de.cm.osm2po.model.LatLon; importer de.cm.osm2po.routing.Graph; importer de.cm.osm2po.routing.MultiTargetRouter; importer de.cm.osm2po.routing.PoiRouter; public class TestOSM { public static void main(String[] args) { File graphFile = new File("C:/osm2po/osm2po-5.0.0/hh/hh_2po.gph"); Graph graph = new Graph(graphFile); // Quelque part à Hambourg int sourceId = graph.findClosestVertexId (53.5f, 10.0f); int targetId = graph.findClosestVertexId (53.4f, 10.1f); graph.close(); } }

Je l'obtiens à compiler en utilisant:

javac -d . -classpath osm2po-core-5.0.0-signed.jar TestOSM.java

Il compile et crée leTestOSM.classfichier.

J'utilise ensuite ce qui suit pour exécuter le programme :

Java TestOSM

Cela donne une erreur d'exécution (je vais montrer le message d'erreur ci-dessous)

Je soupçonne que le programme ne lit pas lehh_2po.gphfichier, j'ai donc utilisé un autre programme java pour utiliser d'abord la lecture de fichier java "normale" pour confirmer l'opération de lecture de fichier réussie.

Mon programme java pour essayer de confirmer la réussite de la lecture du fichier ressemble à ceci :

importer java.io.File; importer java.util.Arrays ; importer java.io.Console ; importer java.io.BufferedReader ; importer java.io.FileReader ; importer java.io.IOException ; importer java.io.FileInputStream ; importer java.io.InputStream ; importer de.cm.osm2po.logging.Log ; importer de.cm.osm2po.logging.Log2poConsoleWriter ; importer de.cm.osm2po.model.LatLon; importer de.cm.osm2po.routing.Graph; importer de.cm.osm2po.routing.MultiTargetRouter; importer de.cm.osm2po.routing.PoiRouter; public class TestOSM { public static void main(String[] args) { // Test du fichier take1 graphFile = new File("C:/osm2po/osm2po-5.0.0/hh/hh_2po.gph"); //Fichier graphFile = new File(args[0]); // a essayé ceci, puis fournissez le nom du fichier lors de l'appel du programme - ne fonctionne pas //Fichier graphFile = new File("hh_2po.gph"); // essayé ceci après avoir copié hh_2po.gph dans le même répertoire - ne fonctionne pas Graph graph = new Graph(graphFile); // Quelque part à Hambourg int sourceId = graph.findClosestVertexId (53.5f, 10.0f); int targetId = graph.findClosestVertexId (53.4f, 10.1f); graph.close(); /* // Test de take2 // Partie 1, pour confirmer que le programme peut lire le fichier hh_2po.gph : try{ BufferedReader reader = new BufferedReader(new FileReader(new File("C:/osm2po/osm2po-5.0.0/ hh/hh_2po.gph"))); String thisLine = thisLine = reader.readLine(); System.out.println(thisLine); System.out.println("fichier bien lu"); lecteur.close(); }catch(IOException ioe) { System.out.println("Impossible de lire le fichier"); } System.out.println("enter pour continuer"); Console console = System.console(); Ligne de chaîne = console.readLine(); // fin du test // Partie 2, essayez cette fois de convertir le fichier en InputStream avant de le convertir en Graph : try{ File initialFile = new File("C:/osm2po/osm2po-5.0.0/hh/hh_2po.gph" ); InputStream targetStream = new FileInputStream(initialFile); Graph graph = new Graph(targetStream); }catch(IOException ioe) { System.out.println("Heuston nous avons un problème"); } */ } }

Lorsque je l'exécute, à nouveau en utilisant java TestOSM, j'obtiens l'erreur d'exécution suivante :

J'utilise Windows10 et java jdk1.8.0_60


Vous devez spécifier le chemin de classe. L'erreur indique qu'une classe n'est pas trouvée. Exécutez votre fichier avec l'option cp :

java -cp osm2po-core-5.0.0-signed.jar TestOSM