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


83

Cuando intento usar clases relacionadas con javafx en mi nuevo proyecto java 8, obtengo 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.

Este 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, según http://en.wikipedia.org/wiki/JavaFX, javaFX es parte de JavaSE. ¿Es posible que Eclipse no reconozca que es parte de javaSE?


2
posible duplicado de la restricción
Nate

3
Puede que tengas razón, su solución propuesta a medias funcionó para mí. Por medio trabajado, quiero decir que si agrego el JRE usando el 'espacio de trabajo predeterminado' jre (jdk1.8.0), funciona, pero cuando uso el 'entorno de ejecución' JavaSE-1.8 (jdk1.8.0) todavía tengo el error.
Lexxicon

Respuestas:


66

Desde el punto de vista de Eclipse, el error es totalmente correcto porque JavaFX proviene de la classpath 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 lo hace automáticamente por usted y, además, incluso le proporciona herramientas para JavaFX CSS y FXML.

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


1
Eso tiene sentido, no me di cuenta de que otras máquinas virtuales no admitían JFX. Creo que mi pregunta original es incontestable debido a que no es un error. Desafortunadamente, no puedo utilizar la solución propuesta debido a algunas políticas en el trabajo.
Lexxicon

3
Usted sabe que todos esos son proyectos de Eclipse: la descarga todo en uno es simplemente una buena característica para comenzar rápidamente. También puede instalar desde Eclipse.org si lo desea. Ver eclipse.org/efxclipse/install.html
tomsontom

Lo sé, pero debido a restricciones internas, no puedo usarlo. Dicho esto, si cree que esta es la mejor solución a este problema, marcaré su respuesta como correcta.
Lexxicon

5
solo algo al lado: si ni siquiera puedes instalar los complementos de eclipse en el trabajo, definitivamente hay algo mal. Limitar a los desarrolladores a un conjunto de herramientas específico equivale a limitar su conjunto de habilidades y calidad de trabajo.
specializt

133

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 instalado e (fx) clipse, que proporciona una solución para esto, además de proporcionar muchas características de desarrollo útiles que seguramente querrá si está escribiendo aplicaciones JavaFX. Este es probablemente el enfoque más práctico. Si por alguna razón 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ñaló 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 se garantiza que estén presentes en todas las plataformas Java. Si está escribiendo una aplicación JavaFX 8, está asumiendo que está 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 diálogo de propiedades del proyecto. Seleccione "Crear ruta" en el panel izquierdo y seleccione la pestaña "Bibliotecas". Verá una entrada "Biblioteca del sistema JRE". Expanda esa entrada y verá una subentrada "Reglas de acceso":

ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

En "Resolución", elija "Accesible" y, en "Patrón de regla", ingrese javafx/**:

ingrese la descripción de la imagen aquí

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 comience javafx., pero conservará la regla en la carpeta ext para todas las demás clases, y es "mínima" en ese sentido.

Nuevamente, lo que probablemente quieras hacer es instalar el complemento e (fx) clipse, pero que yo sepa, esta es la solución con menos efectos secundarios en tu configuración de Eclipse.


¿Hay también una forma de configurar esto desde el pom en maven?
RobAu

1
Explicación
clara

@RobAu Vea aquí para un trabajo experto
Stefan

1
¡Simple y perfecto! :)
Sanket Patel

Veo en una línea de su respuesta eso e(fx)clipse is providing many useful development features . Se ha agregado un nuevo elemento SashPaneque soluciona algunos SliderPaneproblemas en e (fx) clipse 2.6 pero realmente no puedo entenderlo. ¿Hay clases que podamos usar de e (fx) clipse? No puedo encontrar nada similar. Quiero decir que no puedo acceder a ninguna clase o encontrar algo útil que pueda usar dentro del programa, como biblioteca, me refiero. Corríjame porque sé que estoy en algún lugar equivocado aquí ... :)
GOXR3PLUS

19

Resolví el problema eliminando y leyendo el JDK en la ruta de compilación. Sin embargo, no me preguntes por qué funciona esto.


1
Creo que la razón por la que puede haber funcionado para usted es que cuando está agregando una biblioteca jre a la ruta de compilación, (eclipse) parece tener el jre predeterminado del 'espacio de trabajo predeterminado' en lugar de usar un entorno de ejecución. Como JFX no parece ser parte de javaSE, el entorno que seleccioné, conservé el error. Mientras que si solo agrega el espacio de trabajo predeterminado jre, ya no tendrá esas restricciones.
Lexxicon

11

La forma más fácil es instalar e (fx) clipse, un complemento para que Eclipse admita 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 "efxclipse" agregado recientemente
  5. Marque la casilla de verificación "e (fx) clipse - instalar" para instalar todos los componentes de esta selección
  6. Continúe con los siguientes pasos para finalizar la instalación.
  7. Reinicia tu Eclipse. Si aún 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


Gracias;) Simple y fácil
J. Adam

¡Funciona, gracias! Acabo de actualizar la URL de ubicación a: download.eclipse.org/efxclipse/updates-released/3.6.0/site
Crozeta

7

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

  • Abra las propiedades del proyecto de su aplicación y seleccione la sección 'Ruta de construcción'.
  • Agregue jre8_0 \ lib \ ext \ jfxrt.jar como un "archivo JAR externo" en la pestaña 'Bibliotecas'.
  • En la pestaña 'Pedido / Exportar' asegúrese de que este jfxrt.jar sea el primero en la lista.

Lo que esto hace es hacer que Eclipse vea el jfxrt.jar como un archivo JAR normal de terceros. El orden es importante para que tenga prioridad sobre la entrada en la biblioteca del sistema JRE. Es el mismo archivo JAR real, pero Eclipse lo ve 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 marcará la diferencia.

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


5
  • ir a la ruta de construcción del proyecto actual

en Bibliotecas

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

ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí


4

Sé que esto ya ha sido respondido, pero encuentro que las soluciones propuestas son 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 realizar una exportación porque jfxrt.jar también se exportará. Probablemente no sea lo que quieres.

Otra opción

En la versión 'Mars' (y posiblemente versiones anteriores) puede desactivar los errores de restricciones de acceso. Debajo

Java-> Compilador-> Vista Errores / Advertencias

y

"API obsoleta y restringida"

puede configurar "Referencia prohibida (regla de acceso)" para ignorarla.

ingrese la descripción de la imagen aquí


4

Sigue estos pasos:

  1. Agregue jfxrt.jar (de su carpeta de instalación) como un "archivo JAR externo" en la pestaña 'Bibliotecas'.

  2. En la pestaña 'Pedido / Exportar', asegúrese de que este jfxrt.jar sea el primero en la lista.

Esto funcionó para mí.


3

Yo tuve el mismo problema. Usé la solución de James_D pero su solución exacta no funcionó para mí. Pero usar en **/javafx/**lugar de javafx/**resolvió el problema por 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 tenía suficiente "reputación" para hacerlo.


Esto resolvió el problema por completo
Paul Carew hace

2

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 de CSS (consulte ¿Cómo deshabilitar la advertencia de CSS "Propiedad desconocida" en Eclipse Mars? ).

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

<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.‌​launcher.StandardVMType/JavaSE-1.8">
    <attributes>
        <attribute name="maven.pomderived" value="true"/>
    </attributes> 
    <accessrules>
        <accessrule kind="accessible" pattern="javafx/**"/>
        <accessrule kind="accessible" pattern="com/sun/javafx/**"/>
    </accessrules>
</classpathentry>

0

Paso 1: Navegue a su jfxrt.jar. C: \ Archivos de programa \ 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 carpeta lib para poner nuestro archivo jfxrt.jar] [2] [2]: https://i.stack.imgur.com/YsJ5S.png

Paso 4: Seleccione la carpeta lib y presione CTRL + V para pegar jfxrt.jar [Pegue su jfxrt.jar] [1] [1]: https://i.stack.imgur.com/Ljogu.png

Paso 5: Haga clic derecho en jfxrt.jar y establezca como Ruta de compilación.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.