2012-05-13 10 views
16

Vorrei sapere che cosa algoritmo di risoluzione percorso relativo al JavaFX immagine del costruttore è di:Dove cerca javafx.scene.image.Image ("flower.png") per flower.png?

  1. applicazioni stand-alone.
  2. Applicazioni distribuite dal browser.
  3. Webstart ha distribuito app.

Se l'algoritmo può cercare in più posizioni, mi piacerebbe sapere quali sono per ciascuno degli scenari di distribuzione di cui sopra.

Se il comportamento delle app autonome è diverso quando l'app viene posizionata in un barattolo, mi piacerebbe saperlo anche questo.

risposta

11

Poi l'utente fornisce percorso relativo alla new Image(String url) sarà relativa contro workdir dell'app aka System.getProperty("user.dir")

  1. per App stand-alone è una cartella che si avvia un'applicazione da
  2. Per web-start app essendo eseguito dalla riga di comando (javaws myfxapp.jnlp) funziona come con l'applicazione standalone
  3. Per l'avvio del plug-in o l'applicazione webstart caricata dal browser non è possibile accertarsi in modo affidabile della posizione del workdir. Dipende dal browser e anche dai plugin installati per quel browser.

direzione in modo generale è: per le applicazioni standalone utilizzano url stesso modo in cui lo userete in new File(String url). Per jnlp/plugin utilizzare l'url completo con protocollo o l'approccio Class.getResource().

Aggiornamento: Si prega di notare, questo comportamento sta per essere chiarito e modificato in 2.2. Vedere http://javafx-jira.kenai.com/browse/RT-18291

il seguente commento è da RT-18291 e delinea i cambiamenti previsti per 2.2:

Martin Sládeček ha aggiunto un commento - Maggio, 15 2012 10:53 Dopo la discussione con Richard Bair, abbiamo ha deciso di modificare il comportamento corrente (non documentato) per i percorsi. Attualmente sono trattati come utente.dir relativo. Tutto il percorso, con o senza una barra iniziale, verrà risolto come relativo al classpath, che sarà coerente con i CSS e più corrisponde a ciò che gli utenti potrebbero aspettarsi. Per i percorsi relativi user.dir, l'URL "file:" può essere ancora utilizzato.

+0

Qual è workdir della app? – jewelsea

+0

Il posto 'System.getProperty (" user.dir ")' punta a :) –

+0

Siamo spiacenti, ho appena notato l'aggiornamento di una domanda. Lo esaminerò più avanti. –

2

La risposta è "/" se si utilizza getClass().getResourceAsStream(), ovvero la radice del file jar (al suo interno). Non user.dir né dove il pacchetto è ospitato

+0

Siamo spiacenti, ma no. Esegui il codice successivo: 'System.setProperty (" user.dir "," c: "); root.getChildren(). add (nuovo ImageView (nuova immagine ("brd.jpg"))); 'e avrai un'eccezione successiva:' java.io.FileNotFoundException: c: \ brd.jpg' –

+0

Sì, giusto , errore mio. Sono abituato a usare getClass(). GetResourceAsStream() che cercherebbe il pacchetto invece di user.dir come hai dichiarato –

+1

per favore, aggiorna la tua risposta per dichiarare che è 'getClass(). GetResourceAsStream()' caso per evitare di confondere i lettori. –

0
  1. directory di ricerca in cui sono presenti file di classe (nome della classe getClass().getName().toString()) relativi al file .java, copia e incolla l'immagine ci
  2. Image image=new Image(getClass().getResourceAsStream("yourImageName.jpg")); è d'obbligo.

in NetBeans directory in cui le classi sono presenti NetBeansProjects/JavaFXProjectName/build/classes/packageName/