2010-11-22 25 views
4

私はプロジェクトのルートフォルダにページフォルダにローカルに保存されている url1.html という名前のHTMLファイルを表示する必要がありますJEditorPaneの持つSwingアプリケーションを作成していて、URLオブジェクトを作成します。は、相対パス

私は、次のStringオブジェクト

final String pagePath = "./page/"; 

と私は、次のURLオブジェクト作成したJEditorPaneのペインで表示されるために、インスタンス化されている。しかし、setPageでメソッドが呼び出されたときに

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

を作成されたURLオブジェクトをパラメータとして

pagePane.setPage(url1); 

thr私にjava.io.FileNotFoundExceptionエラーが発生しました

url1の方法が間違っているようです。誰でもこの問題の解決策を知っていますか?

答えて

14

ソリューションがそれにjava.io.Fileのオブジェクトを作るurl1.htmlへの絶対パスを見つけ、その後、toURI().toURL()組み合わせを使用することです:現在のディレクトリがpageのルートの場合

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

はと仮定し、あなたが渡すことができますFileへの相対パス:

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

又は

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

しかし、これはアプリケーションの実行場所によって異なります。私はそれがアプリケーションのための唯一の構成可能なオプションである場合、または構成ファイルがある場合、それがコマンドライン引数としてルートディレクトリを取るようにします。

別の解決策は、アプリケーションのjarファイルにリソースとしてhtmlファイルを置くことです。

0

私は、私はあなたが問題に実行されている、文字列全体を連結して信じて、次の

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

をしようとするだろう。それはクラスパスからリソースをロードするには

1

を助けた場合は、次の操作を行うことができます(khachikが述べたように)、私は知ってみましょう:

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

または静的文脈から:

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

ので、上記の場合、Maven構造を使用すると、HTMLページは次のような場所にあります:

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