web-dev-qa-db-fra.com

Utilisation de JavaFX dans JRE 8, erreur «Access restriction»

Lorsque j'essaie d'utiliser des classes liées à javafx dans mon nouveau projet Java 8, je reçois une erreur de restriction d'accès d'Eclipse. Jusqu'à présent, la seule "solution" que j'ai pu trouver consiste à indiquer à Eclipse: ignorer la restriction d'accès, mais je ne suis pas satisfait de cela. Un exemple d'erreur:

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

J'utilise Eclipse Kepler avec le correctif Eclipse JDT pour Java 8.

Cela semble être un problème lié au fait que JavaFX ne fait pas partie de l'environnement d'exécution JavaSE.

Je suis maintenant durement confondu selon http://en.wikipedia.org/wiki/JavaFX javaFX fait partie de JavaSE. Est-il possible qu'Eclipse ne reconnaisse pas qu'il fait partie de javaSE?

76
Lexxicon

Du point de vue d’Eclipse, l’erreur est totalement correcte car JavaFX provient du chemin de classe d’extension et n’est pas disponible sur TOUS les ordinateurs virtuels Java8 (par exemple, ibm!).

Comme indiqué, vous pouvez supprimer ces avertissements en ajoutant des règles d'accès ou, à mon humble avis, la meilleure solution consiste à installer e (fx) clipse, qui le fait automatiquement pour vous et qui vous fournit même des outils pour JavaFX CSS et FXML.

Vous pouvez récupérer un paquet tout en un à partir de http://efxclipse.bestsolution.at/install.html

62
tomsontom

Je vais ajouter une autre réponse ici, juste pour fournir ce que je pense être l'approche la plus minimale. Dans ma configuration Eclipse, e (fx) clipse est installé, ce qui fournit un correctif, ainsi que de nombreuses fonctionnalités de développement utiles que vous souhaiterez certainement si vous écrivez des applications JavaFX. C'est probablement l'approche la plus pratique. Si, pour une raison quelconque, vous ne souhaitez pas utiliser ce plug-in, la solution décrite dans cette réponse résoudra le problème en réduisant le plus possible le nombre d'effets secondaires.

Comme indiqué dans d'autres réponses, Eclipse interdit par défaut l'accès aux classes des fichiers jar du répertoire jre/lib/ext, car leur présence n'est pas garantie sur toutes les plates-formes Java. Si vous écrivez une application JavaFX 8, vous supposez que vous êtes sur une plate-forme sur laquelle jfxrt.jar est disponible à l'emplacement lib/ext.

Ainsi, le correctif minimal consiste à autoriser l'accès aux classes de ce fichier jar (et uniquement de ce fichier jar). Pour ce faire, cliquez avec le bouton droit sur le projet et ouvrez la boîte de dialogue des propriétés du projet. Sélectionnez "Chemin de construction" dans le volet de gauche, puis sélectionnez l'onglet "Bibliothèques". Vous verrez une entrée "JRE System Library". Développez cette entrée et vous verrez une sous-entrée "Règles d'accès":

enter image description here

Sélectionnez l'entrée "Règles d'accès" et cliquez sur "Modifier". Cliquez sur "Ajouter".

enter image description here

Sous "Résolution", choisissez "Accessible", et sous "Modèle de règle", entrez javafx/**:

enter image description here

Cliquez sur OK pour quitter tous les dialogues.

Ce paramètre autorisera l’accès à toutes les classes des paquets commençant par javafx., mais conservera la règle sur le dossier ext pour toutes les autres classes et est "minimal" dans ce sens.

Encore une fois, ce que vous voulez probablement vraiment faire est d’installer le plugin e (fx) clipse, mais à ma connaissance, c’est la solution qui présente le moins d’effets secondaires sur votre configuration Eclipse.

123
James_D

J'ai résolu le problème en supprimant et en lisant le JDK dans le chemin de génération. Ne me demandez pas pourquoi cela fonctionne, cependant.

18
Ray

Le moyen le plus simple consiste à installer e (fx) clipse, un plugin permettant à Eclipse de prendre en charge JavaFX:

  1. Sélectionnez Aide -> Installer un nouveau logiciel
  2. Cliquez sur le bouton Ajouter pour ajouter le site suivant:
  3. Cliquez sur OK
  4. Dans "Travailler avec", sélectionnez le site "efxclipse" récemment ajouté.
  5. Cochez la case "e (fx) clipse - install" pour installer tous les composants de cette sélection
  6. Passer aux étapes suivantes pour terminer l'installation
  7. Redémarrez votre Eclipse. S'il ne reconnaît toujours pas la bibliothèque JavaFX, redémarrez-la.

Les informations originales peuvent être trouvées ici: https://www.Eclipse.org/efxclipse/install.html#for-the-lazy

9
Thach Van

J'ai résolu ce problème en utilisant avec précaution le chemin de génération du projet Eclipse.

  • Affichez les propriétés du projet d'application et sélectionnez la section "Chemin de construction".
  • Ajoutez le fichier jre8_0\lib\ext\jfxrt.jar en tant que "fichier JAR externe" dans l'onglet "Bibliothèques".
  • Dans l'onglet 'Order/Export', assurez-vous que ce fichier jfxrt.jar figure en premier dans la liste.

En faisant cela, Eclipse voit le fichier jfxrt.jar comme un fichier JAR tiers standard. L'ordre est important pour que cela ait priorité sur l'entrée dans la bibliothèque système JRE. C'est le même fichier JAR, mais Eclipse le voit différemment.

Vous voudrez peut-être modifier les configurations d'exécution pour ne pas utiliser la version "Exportée" du fichier jfxrt.jar; Cependant, dans la pratique, cela ne fera aucune différence.

Je l'ai fait avec Java8 et Eclipse Luna; mais je suis sûr que le principal travaillerait avec n’importe quelle combinaison de Java et d’Eclipse.

7
Calanais
  • accédez au chemin de construction du projet en cours.

sous Bibliothèques

  • sélectionnez la " bibliothèque système JRE [jdk1.8xxx]"
  • cliquez sur modifier
  • et sélectionnez soit "JRE par défaut de l'espace de travail (jdk1.8xx)" [~ # ~] ou [~ # ~] JRE de remplacement
  • Cliquez sur Terminer
  • Cliquez sur OK

enter image description here

Remarque: assurez-vous que dans Eclipse/Preferences (PAS le projet)/Java/JRE installé, le jdk pointe vers le dossier JDK et non vers le JRE C :\Program Files\Java\jdk1.8.0_74

enter image description here

5
usertest

Je sais que cela a déjà été répondu, mais je trouve les solutions proposées maladroites.

  1. Je ne veux pas installer un plugin juste pour éviter ce que je considère être une erreur invalide.
  2. Ajouter jfxrt.jar en tant que jar externe fonctionnera, mais si vous envisagez une exportation est une mauvaise idée, car jfxrt.jar sera également exporté. Probablement pas ce que tu veux.

Une autre option

Dans la version 'Mars' (et éventuellement des versions antérieures), vous pouvez désactiver les erreurs de restriction d'accès. Sous

Java-> Compilateur-> Vue Erreurs/Avertissements

et

"API obsolète et restreinte"

vous pouvez définir "Référence interdite (règle d'accès)" à ignorer.

enter image description here

3
user2426985

Suivez ces étapes:

  1. Ajoutez le fichier jfxrt.jar (à partir de votre dossier d'installation) en tant que "fichier JAR externe" dans l'onglet "Bibliothèques".

  2. Dans l'onglet 'Order/Export', assurez-vous que ce fichier jfxrt.jar figure en premier dans la liste.

Cela a fonctionné pour moi.

3
Natile

J'ai eu le même problème. J'ai utilisé la solution de James_D mais sa solution exacte n'a pas fonctionné pour moi. Mais en utilisant **/javafx/** au lieu de javafx/** résolu le problème pour moi. J'espère que ça t'as aidé.

PS: Je posterais ceci comme commentaire sous la solution de James_D mais je viens juste de m'inscrire et je n'ai pas assez de "réputation" pour le faire.

1
anand

Comme James_D l'a déjà suggéré, j'ai ajouté des règles d'accès à mon fichier de chemin de classe. J'ai désinstallé le plugin e (fx) clipse pour le moment car il a un bogue de validation css (voir Comment désactiver l'avertissement css "Propriété inconnue" dans Eclipse Mars? ).

Voici mon entrée dans le fichier classpath du conteneur 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>
1
Stefan

Étape 1: Accédez à votre fichier jfxrt.jar. C:\Program Files\Java\jre1.8.0_111\lib\ext

Étape 2 Copiez le fichier jfxrt.jar

Étape 3: accédez à Eclipse, créez un nouveau dossier comme celui-ci: [Création du nom de dossier lib pour mettre notre fichier jfxrt.jar] [2] [2]: https://i.stack.imgur.com /YsJ5S.png

Étape 4: sélectionnez le dossier lib et appuyez sur CTRL + V pour coller le fichier jfxrt.jar [Collez votre fichier jfxrt.jar] [1] [1]: https://i.stack.imgur.com/Ljogu .png

Étape 5: Cliquez avec le bouton droit sur jfxrt.jar et définissez-le comme chemin de construction.

0
Mohd Jahid