Translation: there’s a English version of this article.
Para algumas classes como o javafx.scene.image.Image é fácil abrir imagens de uma localidade remotada com:
ImageView { image: Image { url: "http://example.com/minhaFigura.png" } } |
ou uma imagem local com a constante __DIR:
ImageView { image: Image { url: "{__DIR__}/minhaFigura.png" } } |
Mas para outras classes abrir recursos internos (de dentro do próprio arquivo jar) não é tão direto. Por exemplo, no artigo Parsing a XML Sandwich with JavaFX eu tive que colocar o arquvio XML dentro de um diretório temporário. Uma maneira mais elegante teria sido:
package handlexml; import java.io.FileInputStream; import javafx.data.pull.*; import javafx.ext.swing.*; import javafx.scene.Scene; import javafx.stage.Stage; class Resource{ function getUrl(name:String){ return this.getClass().getResource(name); } function getStream(name:String){ return this.getClass().getResourceAsStream(name); } } var list = SwingList { width: 600, height: 300} var myparser = PullParser { documentType: PullParser.XML; onEvent: function (e: Event) { var item = SwingListItem {text: "event {e}"}; insert item into list.items; } input: Resource{}.getStream("my.xml"); } myparser.parse(); Stage { title: "Map" scene: Scene { content: list } } |
Com um simples arquivo XML chamadovmy.xml dentro do seu pacote.
<?xml version="1.0" encoding="UTF-8"?> <bread sesame="true"> <catchup/> <hamburguer/> <cheese type="chedar"/> <maionese/> <lettuce/> </bread> |

E temos os mesmos resultados de antes, mas com todos seus aquivos dentro de seus Jars.

Referencias:
- Artigo do Hildeberto Acessing Resources Inside of JAR Files