2012-01-19 17 views
9

loadContent()メソッドでwebEngineにロードされるString HTMLコンテンツがあります。私はまた、このページで使用されるいくつかのCSSと画像ファイルを持っています。私はこれらのファイルをJavaクラスの同じパッケージに入れますが、ロードされたページはそれらを見つけることができません。 APIのドキュメントやウェブを探したが、それに似た適切な解決策を見つけることができなかった。これらのファイルをどのようにロードするのですか?javafx.scene.web.WebEngine#loadContentによって読み込まれたhtmlページからCSSおよびイメージファイルにアクセスするには?

答えて

7

あなたはloadContent次の方法のためのHTML文字列で、ローカルパスを設定する必要があります。

view.getEngine().loadContent(
"<img src='" + getClass().getResource("1.jpg") + "' />"); 
+0

を試してみてください? – alistair

+0

@alistair ImageIOクラスを使用することができます。Buffered Imagesを読み取るメソッドがあります。 –

10

あなたは、Javaクラスと同じパッケージ内のファイルで、あなたの文字列のHTMLコンテンツを配置し、代わりにengine.load(String url)方法を使用することができます:

engine.load(getClass().getResource("mypage.html").toExternalForm()); 

あなたがこれを行うと、HTMLページ内のすべての相対リンクは、あなたのJavaパッケージ内のリソース(例えば、CSSと画像ファイル)に解決されます。

jarファイルにあるリソースをロードする場合、jar:プロトコルは親指定子を持つ相対リンクを理解していないことに注意してください。たとえば、<img src="../images/image.png"/>は動作しませんが、<img src="/images/image.png"/>または<img src="images/image.png"/>は(画像をjarファイルの適切な場所に置くと)長くなります。 file:プロトコルにはこのような制限がなく、リソースを使用してロードすると、相対リンクが正常に機能します。

静的ではなくJavaコードによってHTML文字列が動的に生成される場合は、Sergeyの解決策が最も適しています。

<html> 
    <head> 
     <title>The slash at the end of the href is important!</title> 
     <base href="file:///absolute/path/to/your/docroot/" /> 
    </head> 
    <body> 
     <img src="image.png"/> 
    </body> 
</html> 

あなたはengine.loadContent(String)経由で上記のコードをロードする場合は、image.png/absolute/path/to/your/docroot/image.pngからロードされます。

3

私はちょうどHTMLで<base>タグを使用しても、トリックを行うことが分かりました。

複数のリソースをロードする必要がある場合は、単一の場所で絶対パスを指定するだけで済みますので、この方法は簡単です。

これはJava 8u25のWebViewでテストされています。

0

は、あなたがメモリにBufferedImageのためにこれを行う方法を知っています。この

<link href="file:css\default.css" rel="stylesheet" type="text/css" /> 
関連する問題