2012-05-13 18 views
16

me gustaría saber qué algoritmo de resolución de ruta relativa de la imagen de constructor de JavaFX es para:¿Dónde se busca javafx.scene.image.Image ("flower.png") para flower.png?

  1. aplicaciones autónomo.
  2. Aplicaciones implementadas en el navegador.
  3. Aplicaciones implementadas en Webstart.

Si el algoritmo puede verse en varias ubicaciones, me gustaría saber cuáles son para cada uno de los escenarios de implementación anteriores.

Si el comportamiento de las aplicaciones independientes es diferente cuando la aplicación se coloca en un contenedor, me gustaría saberlo también.

Respuesta

11

A continuación, el usuario proporciona ruta relativa a new Image(String url) será relativa contra workdir de la aplicación también conocido como System.getProperty("user.dir")

  1. Para aplicación independiente que es una carpeta que inicia una aplicación de
  2. Para aplicación web de inicio siendo ejecutar desde la línea de comandos (javaws myfxapp.jnlp) funciona de la misma manera que con la aplicación independiente
  3. Para la aplicación de inicio de plugin o webstart cargada desde el navegador no puede estar seguro de la ubicación del directorio de trabajo. Depende del navegador e incluso de los complementos instalados para ese navegador.

dirección, de manera general es: para aplicaciones independientes utilizan url misma manera que lo vas a usar en new File(String url). Para jnlp/plugin use url completo con protocolo o enfoque Class.getResource().

Actualización: Tenga en cuenta que este comportamiento se va a aclarar y cambiar en 2.2. Ver http://javafx-jira.kenai.com/browse/RT-18291

El siguiente comentario es de RT-18291 y describe los cambios previstos para 2.2:

Martin Sládeček añadió un comentario - 15 de mayo 2012 10:53 Después de la discusión con Richard Bair, nos decidió cambiar el comportamiento actual (no documentado) de las rutas. Actualmente, son tratados como user.dir relativo. Toda la ruta, con o sin barra diagonal inicial, se resolverá ahora en relación con la ruta de clase, que será coherente con CSS y más se corresponderá con lo que los usuarios podrían esperar. Para las rutas relativas de usuario.dir, la URL de "archivo:" aún se puede usar.

+0

¿Cuál es workdir de la aplicación? – jewelsea

+0

El lugar 'System.getProperty (" user.dir ")' apunta a :) –

+0

Lo siento, acaba de notar su actualización de una pregunta. Lo investigaré más adelante. –

2

La respuesta es "/" si está utilizando getClass().getResourceAsStream(), es decir, la raíz de su archivo jar (dentro de él). No user.dir ni donde el paquete está alojado

+0

Lo siento, pero no. Ejecute el siguiente código: 'System.setProperty (" user.dir "," c: "); root.getChildren(). add (new ImageView (new Image ("brd.jpg"))); 'y tendrás la siguiente excepción:' java.io.FileNotFoundException: c: \ brd.jpg' –

+0

Sí, eso es correcto , mi error. Estoy acostumbrado a usar getClass(). GetResourceAsStream() que buscaría el paquete en lugar de user.dir como dijiste –

+1

por favor, actualiza tu respuesta para indicar que es el caso 'getClass(). GetResourceAsStream()' para evitar confundir a los lectores. –

0
  1. directorio de búsqueda en los archivos de clase (nombre de la clase getClass().getName().toString()) relacionados con el archivo .java están presentes, copiar y pegar su imagen no
  2. Image image=new Image(getClass().getResourceAsStream("yourImageName.jpg")); es imprescindible.

En NetBeans el directorio donde las clases están presentes NetBeansProjects/JavaFXProjectName/build/classes/packageName/

Cuestiones relacionadas