Usando JavaFX en JRE 8, error de “restricción de acceso”

Cuando trato de usar clases relacionadas con javafx en mi nuevo proyecto Java 8, recibo un error de restricción de acceso de eclipse. Hasta ahora, la única ‘solución’ que he podido encontrar es decirle a eclipse que ignore la restricción de acceso, pero no estoy satisfecho con eso. Un ejemplo del error:

Access restriction: The type Pane is not accessible due to restriction on required library C:\Program Files\Java\jre8_0\lib\ext\jfxrt.jar 

Estoy usando Eclipse Kepler con el parche Eclipse JDT para java 8.

Esto parece ser un problema relacionado con el hecho de que JavaFX no es parte del entorno de ejecución de JavaSE.

Ahora estoy muy confundido ya que de acuerdo con http://en.wikipedia.org/wiki/JavaFX javaFX es una parte de JavaSE. ¿Es posible que Eclipse no reconozca que es una parte de javaSE?

Desde el punto de vista de Eclipse, el error es totalmente correcto porque JavaFX proviene de la ruta de clases de extensión y no está disponible en TODAS las máquinas virtuales Java8 (por ejemplo, ibm!).

Como se describe, puede suprimir esas advertencias agregando reglas de acceso o en mi humilde opinión la mejor solución es instalar e (fx) clipse, que hace esto automáticamente para usted y, además, le proporciona herramientas para JavaFX CSS y FXML.

Puede obtener un paquete todo en uno de http://efxclipse.bestsolution.at/install.html

Voy a agregar una respuesta más aquí, solo para proporcionar lo que creo que es el enfoque más mínimo. En mi configuración de Eclipse, tengo e (fx) clipse instalado, que proporciona una solución para esto, además de proporcionar muchas funciones de desarrollo útiles que seguramente querrá si está escribiendo aplicaciones JavaFX. Este es probablemente el enfoque más práctico. Si por algún motivo no desea ese complemento, la solución descrita en esta respuesta solucionará el problema con la menor cantidad de otros efectos secundarios.

Como se señala en otras respuestas, Eclipse, de forma predeterminada, no permite el acceso a clases en archivos jar en el directorio jre / lib / ext, ya que no está garantizado que estén presentes en todas las plataformas Java. Si está escribiendo una aplicación JavaFX 8, está asumiendo que se encuentra en una plataforma donde jfxrt.jar está disponible en la ubicación lib / ext.

Entonces, la solución mínima para esto es permitir el acceso a las clases en este archivo jar (y solo en este archivo jar). Para hacer esto, haga clic derecho en el proyecto y abra el cuadro de diálogo de propiedades del proyecto. Seleccione “Ruta de comstackción” en el panel izquierdo y seleccione la pestaña “Bibliotecas”. Verá una entrada de “Biblioteca del sistema JRE”. Expanda esa entrada y verá una subinserción de “Reglas de acceso”:

enter image description here

Seleccione la entrada “Reglas de acceso” y haga clic en “Editar”. Haga clic en “Agregar”.

enter image description here

En “Resolución”, selecciona “Accesible” y debajo de “Patrón de regla”, ingresa javafx/** :

enter image description here

Haga clic en Aceptar para salir de todos los cuadros de diálogo.

Esta configuración permitirá el acceso a todas las clases en cualquier paquete que javafx. , pero conservará la regla en la carpeta ext para todas las demás clases, y es “mínima” en ese sentido.

Una vez más, lo que probablemente quiera hacer es instalar el complemento e (fx) clipse, pero que yo sepa, esta es la solución con menos efectos secundarios en su configuración de Eclipse.

Resolví el problema al eliminar y leer el JDK en la ruta de comstackción. Sin embargo, no me preguntes por qué funciona esto.

Resolví este problema mediante un uso cuidadoso de la ruta de comstackción del proyecto Eclipse.

  • Abra las propiedades del proyecto de aplicación y seleccione la sección ‘Ruta de comstackción’.
  • Agregue el archivo jre8_0 \ lib \ ext \ jfxrt.jar como un “archivo JAR externo” en la pestaña “Bibliotecas”.
  • En la pestaña ‘Ordenar / Exportar’, asegúrese de que este jfxrt.jar sea el primero en la lista.

Lo que hace esto es hacer que Eclipse vea el jfxrt.jar como un archivo JAR de terceros normal. El orden es importante para que esto tenga prioridad sobre la entrada en la biblioteca del sistema JRE. Es el mismo archivo JAR real, pero Eclipse lo está viendo de manera diferente.

Es posible que desee modificar las configuraciones de ejecución para que no utilice la versión ‘Exportada’ de jfxrt.jar; sin embargo, en términos prácticos, esto no hará la diferencia.

He hecho esto con Java8 y Eclipse Luna; pero estoy seguro de que el director trabajará con cualquier combinación de Java y Eclipse.

La manera más fácil es instalar e (fx) clipse, un complemento para Eclipse que admite JavaFX:

  1. Seleccione Ayuda -> Instalar nuevo software
  2. Haga clic en el botón Agregar para agregar el siguiente sitio:
  3. Haga clic en Aceptar
  4. En “Trabajar con”, seleccione el sitio recientemente agregado “efxclipse”
  5. Marque la casilla “e (fx) clipse – install” para instalar todos los componentes de esta selección
  6. Pase a los siguientes pasos para finalizar la instalación
  7. Reinicia tu Eclipse. Si todavía no reconoce la biblioteca JavaFX, reiníciela nuevamente.

La información original se puede encontrar aquí: https://www.eclipse.org/efxclipse/install.html#for-the-lazy

  • ir a la ruta de comstackción del proyecto actual

bajo Bibliotecas

  • seleccione la ” Biblioteca del sistema JRE [jdk1.8xxx]”
  • haga clic en editar
  • y seleccione “Espacio de trabajo predeterminado JRE (jdk1.8xx)” O JRE alternativo
  • Haga clic en finalizar
  • Haga clic en Aceptar

enter image description here

Nota: asegúrese de que en Eclipse / Preferences (NO el proyecto) / Java / JRE instalado, que el jdk apunte a la carpeta JDK no al JRE C: \ Program Files \ Java \ jdk1.8.0_74

enter image description here

sigue estos pasos:
1. Agregue jfxrt.jar (desde su carpeta de instalación) como un “archivo JAR externo” en la pestaña “Bibliotecas”.

  1. En la pestaña ‘Ordenar / Exportar’, asegúrese de que este jfxrt.jar sea el primero en la lista.

esto funcionó para mí

Sé que esto ya ha sido respondido, pero las soluciones propuestas me parecen torpes.

  1. No quiero instalar un complemento solo para evitar lo que considero un error no válido.
  2. Agregar jfxrt.jar como jar externo funcionará, pero es una mala idea si planea exportar porque también se exportará jfxrt.jar. Probablemente no es lo que quieres.

Otra opción

En el lanzamiento de ‘Mars’ (y posiblemente versiones anteriores) puede desactivar los errores de restricciones de acceso. Debajo

Java-> Compiler-> Vista de errores / advertencias

y

“API obsoleta y restringida”

puede configurar “Referencia prohibida (regla de acceso)” para ignorar.

enter image description here

Como James_D ya sugirió, agregué reglas de acceso a mi archivo classpath. Desinstalé el complemento e (fx) clipse por el momento porque tiene un error de validación css (consulte Cómo deshabilitar la advertencia css “Propiedad desconocida” en Eclipse Mars? ).

Aquí está mi entrada en el archivo classpath para el contenedor JRE:

          

Yo tuve el mismo problema. Usé la solución de James_D pero su solución exacta no funcionó para mí. Pero el uso de **/javafx/** lugar de javafx/** resolvió el problema para mí. Espero que ayude.

PD: Publicaría esto como un comentario bajo la solución de James_D, pero me acabo de registrar y no tengo suficiente “reputación” para hacerlo.

Paso-1: navega hacia tu jfxrt.jar. C: \ Archivos de progtwig \ Java \ jre1.8.0_111 \ lib \ ext

Paso-2 Copie el archivo jfxrt.jar

Paso 3: vaya a Eclipse, cree una nueva carpeta como esta: [Creando el nombre de la carpeta lib para poner nuestro archivo jfxrt.jar] [2] [2]: https://i.stack.imgur.com/YsJ5S.png

Paso-4: selecciona la carpeta lib y presiona CTRL + V para pegar el jfxrt.jar [Pega tu jfxrt.jar] [1] [1]: https://i.stack.imgur.com/Ljogu.png

Paso-5: haga clic con el botón derecho en jfxrt.jar y configure como Ruta de comstackción.