2010-11-22 4 views
4

Je crée une application Swing avec un JEditorPane qui devrait afficher un fichier HTML nommé url1.html stocké localement dans le dossier page dans le dossier racine du projet.la création d'un objet URL avec un chemin relatif

J'instancié l'objet chaîne suivante

final String pagePath = "./page/"; 

et pour afficher le volet JEditorPane j'ai créé l'objet URL suivante:

URL url1 = new URL("file:///"+pagePath+"url1.html"); 

Cependant, lorsque la méthode setPage est appelée avec l'objet URL créé en tant que paramètre

pagePane.setPage(url1); 

me semble une erreur java.io.FileNotFoundException

Il semble qu'il y ait quelque chose qui ne va pas dans la façon dont a été construit url1. Quelqu'un connaît une solution à ce problème?

Répondre

14

La solution est de trouver un chemin absolu url1.html faire un objet de java.io.File dessus, puis utilisez toURI().toURL() combinaison:

URL url1 = (new java.io.File(absolutePathToHTMLFile)).toURI().toURL(); 

Si l'on suppose que le répertoire en cours est la racine de page, vous pouvez passer un chemin relatif au File:

URL url1 = (new java.io.File("page/url1.html")).toURI().toURL(); 

ou

URL url1 = (new java.io.File(new java.io.File("page"), "url1.html")).toURI().toURL(); 

Mais cela dépend de l'endroit où vous exécutez l'application. Je le ferais prendre le répertoire racine en tant qu'argument de ligne de commande si c'est la seule option configurable pour l'application, ou à partir d'un fichier de configuration, s'il en a un.

Une autre solution consiste à placer le fichier html en tant que ressource dans le fichier jar de votre application.

0

Je voudrais essayer les suivantes

URL url = new URL("file", "", pagePath+"url1.html"); 

Je crois en concaténant la chaîne entière, vous êtes en cours d'exécution des problèmes. Faites-moi savoir, si cela a aidé

1

Pour charger une ressource de la classpath (comme Khachik mentionné), vous pouvez effectuer les opérations suivantes:

URL url = getClass().getResource("page/url1.html"); 

ou d'un contexte statique:

URL url = Thread.currentThread().getContextClassLoader().getResource("page/url1.html"); 

Alors dans le cas ci-dessus, en utilisant une structure Maven, la page HTML serait à un emplacement tel que celui-ci:

C:/myProject/src/main/resources/page/url1.html