2012-01-19 13 views
9

Ho un contenuto HTML stringa che viene caricato nel metodo webEngine tramite loadContent(). Ho anche alcuni file CSS e immagini usati in questa pagina. Sebbene inserissi questi file nello stesso pacchetto di classe java, la pagina caricata non li trovava. Ho cercato documenti e web API, ma non ho trovato nessuna soluzione simile appropriata. Come carico questi file?Come raggiungere file css e immagine dalla pagina html caricata da javafx.scene.web.WebEngine # loadContent?

risposta

7

è necessario impostare i percorsi locali nella stringa HTML per loadContent prossimo modo:

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

Sai come fare questo per un BufferedImage in memoria? – alistair

+0

@alistair puoi usare la classe ImageIO, ha un metodo per leggere le immagini bufferizzate. –

10

è possibile posizionare il contenuto HTML stringa in un file nella stessa pacchetto come la classe Java e utilizzare il metodo engine.load(String url) invece :

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

Quando si esegue questa operazione, tutti i collegamenti relativi nella pagina HTML risolverà alle risorse (ad esempio CSS e file di immagini) nel pacchetto Java.

Attenzione che se si sta caricando una risorsa che si trova in un file jar, il protocollo jar: non comprende i collegamenti relativi con gli identificatori principali. Ad esempio, <img src="../images/image.png"/> non funzionerà, ma <img src="/images/image.png"/> o <img src="images/image.png"/> durerà a lungo (come si inserisce l'immagine nella posizione appropriata nel file jar). Il protocollo file: non ha tali restrizioni e i collegamenti relativi a .. funzioneranno correttamente quando le risorse vengono caricate.

Se la stringa html viene generata dinamicamente dal codice java anziché statica, la soluzione di Sergey è probabilmente la migliore.

3

ho appena scoperto che utilizzando il tag nel codice HTML <base> fa anche il trucco:

<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> 

Se si carica il codice di cui sopra via engine.loadContent(String) poi image.png verranno caricate dalla /absolute/path/to/your/docroot/image.png.

Questo metodo è più semplice se è necessario caricare più risorse poiché è necessario specificare il percorso assoluto in un singolo punto.

Questo è stato testato con WebView di Java 8u25.

0

Prova questa

<link href="file:css\default.css" rel="stylesheet" type="text/css" /> 
Problemi correlati