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