Utilisation de JavaFX dans JRE 8, Erreur "restriction D'accès"

en essayant d'utiliser des classes liées à javafx dans mon nouveau projet java 8, j'obtiens une erreur de restriction d'accès de eclipse. Jusqu'à présent, la seule "solution" que j'ai pu trouver est de dire à eclipse d'ignorer la restriction d'accès, mais je ne suis pas satisfait de cela. Un exemple de l'erreur:

Access restriction: The type Pane is not accessible due to 
restriction on required library C:Program FilesJavajre8_0libextjfxrt.jar

J'utilise Eclipse Kepler avec le patch Eclipse JDT pour java 8.

cela semble être une question liée au fait que JavaFX n'est pas une partie de L'environnement D'exécution JavaSE.

je suis maintenant très confus comme selon http://en.wikipedia.org/wiki/JavaFX javaFX fait partie de la JavaSE. Est-il possible Qu'Eclipse ne reconnaisse pas qu'elle fait partie de javaSE?

69
demandé sur Basil Bourque 2014-04-02 17:07:34

11 réponses

du Point de vue Eclipse, l'erreur est totalement correcte car JavaFX vient de la classe extension Path et n'est pas disponible sur tous les Vm Java8 (par exemple ibm!).

comme souligné, vous pouvez supprimer ces avertissements en ajoutant des règles d'accès ou IMHO la meilleure solution est d'installer E (fx)clipse qui le fait automatiquement pour vous et à côté de cela vous fournit même l'outillage pour JavaFX CSS et FXML.

Vous pouvez prendre un tout en un paquet de http://efxclipse.bestsolution.at/install.html

57
répondu tomsontom 2017-05-22 15:04:53

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, j'ai installé e(fx)clipse, qui fournit une solution pour cela, ainsi que de nombreuses fonctionnalités de développement utiles que vous voudrez presque certainement si vous écrivez des applications JavaFX. C'est probablement la méthode la plus pratique. Si pour une raison quelconque vous ne voulez pas que le plugin, la solution décrite dans cette réponse va corriger le problème avec le moins de montant d'autres effets secondaires.

comme indiqué dans d'autres réponses, Eclipse, par défaut, interdit l'accès aux classes dans les fichiers jar dans le répertoire jre/lib/ext, car ceux-ci ne sont pas garantis présents sur toutes les plateformes Java. Si vous écrivez une application JavaFX 8, vous supposez que vous êtes sur une plate-forme où jfxrt.jar est disponible dans l'emplacement lib/ext.

ainsi le minimal fixe pour ceci est de permettre l'accès aux classes dans ce fichier jar (et uniquement dans ce fichier jar). Pour ce faire, cliquez-droit sur le projet et afficher la fenêtre de propriétés du projet. Sélectionnez " Build Path "dans le volet de gauche, et sélectionnez l'onglet" Libraries". Vous verrez une entrée" JRE System Library". Élargissez cette entrée, et vous verrez un sous-secteur "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ègles", inscrivez javafx/** :

enter image description here

cliquez sur OK pour quitter tous les dialogues.

ce paramètre permettra d'accéder à toutes les classes de tous les paquets commençant par javafx. , mais préservera la règle sur le dossier ext pour tous les autres cours, et est "minime" 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 avec le moins d'effets secondaires sur votre installation Eclipse.

107
répondu James_D 2016-01-09 15:40:29

j'ai résolu le problème en enlevant et en lisant le JDK sur le chemin de construction. Ne me demande pas pourquoi ça marche.

16
répondu Ray 2014-04-02 13:23:54

j'ai résolu ce problème en utilisant soigneusement le chemin de construction du projet Eclipse.

  • " brisez les propriétés du projet de votre application et sélectionnez la section 'Build Path'.
  • ajouter le jre8_0\lib\ext\jfxrt.jar comme un "fichier JAR externe" dans le Onglet "Bibliothèques".
  • dans l'onglet "commande/Exportation" s'assurer que cette jfxrt.jar est en premier dans la liste.

ce Que cela fait fait éclipse voir le jfxrt.jar est juste un fichier JAR de tierce partie. L'ordre est important de sorte que cela a priorité sur l'entrée dans la bibliothèque du système JRE. C'est le même fichier JAR, mais Eclipse le voit différemment.

vous pouvez modifier n'importe quelle configuration d'exécution pour qu'elle n'utilise pas la version 'exportée' du jfxrt.jar; toutefois, en termes pratiques, cela ne fera pas de différence.

J'ai fait ça avec Java8 et Eclipse Luna; mais le principal serait je suis sûr de travailler avec n'importe quelle combinaison de Java et Eclipse.

6
répondu Calanais 2014-12-13 13:30:16

le moyen facile est d'installer E (fx)clipse-un plugin pour Eclipse pour soutenir JavaFX:

  1. Sélectionner Aide - > Installer Un Nouveau Logiciel
  2. cliquez sur le bouton Ajouter pour ajouter le site suivant:
  3. Cliquez sur OK
  4. dans le "travailler avec", sélectionnez le site récemment ajouté "efxclipse "
  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 éclipse. S'il ne reconnaît toujours pas la bibliothèque JavaFX, redémarrez-la.

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

6
répondu Thach Van 2015-03-25 04:01:36
  • aller au chemin de construction du projet en cours

sous bibliothèques

  • sélectionner la " JRE System Library [jdk1.8xxx] "
  • , cliquez sur modifier
  • et sélectionnez "espace de travail par défaut JRE(jdk1.8xx)" OU Autre JRE
  • Cliquez sur terminer
  • cliquez OK

enter image description here

Note: assurez-vous que dans Eclipse / Preferences (pas le projet) / Java / JRE installé, que le jdk pointe vers le dossier JDK pas le JRE C:\Program fichiers\Java\jdk1.8.0_74

enter image description here

5
répondu usertest 2016-03-20 18:05:39

suivez ces étapes:

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

  1. dans l'onglet "commande/Exportation", assurez-vous que ce jfxrt.le pot est en premier dans la liste.

cela a fonctionné pour moi

3
répondu Natile 2015-04-12 20:33:03

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

  1. Je ne veux pas installer un plugin juste pour éviter ce que je considère comme une erreur non valide.
  2. Adding jfxrt.jar comme jar externe fonctionnera, mais est une mauvaise idée si vous prévoyez de faire une exportation parce que jfxrt.pot va être exporté. Probablement pas ce que vous voulez.

une Autre option

dans la version' Mars ' (et peut-être des versions antérieures), vous pouvez désactiver les erreurs de restrictions d'accès. Sous

Java->Compiler->les Erreurs/Avertissements vue

et

"Obsolète et restreint API"

, vous pouvez régler "Interdit de référence (règle d'accès)" de l'ignorer.

enter image description here

2
répondu 2015-08-01 04:49:34

comme James_D l'a déjà suggéré, j'ai ajouté des règles d'accès à mon fichier classpath. J'ai désinstallé le plugin e (fx)clipse pour le moment parce qu'il a un bug de validation css (Voir comment désactiver l'avertissement CSS "propriété inconnue" dans Eclipse Mars? ).

Voici mon entrée dans le fichier classpath pour le 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
répondu Stefan 2017-05-23 12:02:48

j'ai eu le même problème. J'ai utilisé la solution de James_D mais sa solution exacte ne fonctionnait pas pour moi. Mais utiliser **/javafx/** au lieu de javafx/** a résolu le problème pour moi. Espérons que cela aide.

PS: je voudrais poster ceci comme un commentaire sous la solution de James_D mais je me suis juste enregistré et n'ai pas eu assez de "réputation" pour le faire.

0
répondu anand 2017-09-07 19:37:11

Étape-1: naviguez vers votre jfxrt.pot. C:\Program fichiers\Java\jre1.8.0_111\lib\ext

Étape-2 Copier le fichier jfxrt.jar

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

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

Step-5: clic droit sur jfxrt.jar et de définir comme Build Path.

-1
répondu Mohd Jahid 2017-01-08 20:18:27