Je viens de commencer à coder/tester des éléments JavaFX sous Linux et je suis confronté à une erreur au moment de démarrer une application simple. J'ai trouvé beaucoup de gens inquiets à ce sujet dans Foruns mais je pouvais trouver une explication claire des raisons pour lesquelles cela se produit. J'aimerais comprendre ce qui manque dans mon scénario pour que cela fonctionne.
Toute suggestion sera vraiment appréciée.
Java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b123)
Java HotSpot(TM) Client VM (build 25.0-b65, mixed mode)
Linux MYServer 2.6.21-1.3228.fc7 #1 SMP Tue Jun 12 15:37:31 EDT 2007 i686 i686 i386 GNU/Linux
Graphics Device initialization failed for : es2, sw
Error initializing QuantumRenderer: no suitable pipeline found
Java.lang.RuntimeException: Java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
at com.Sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.Java:300)
at com.Sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.Java:244)
at com.Sun.javafx.tk.Toolkit.getToolkit(Toolkit.Java:179)
at com.Sun.javafx.application.PlatformImpl.startup(PlatformImpl.Java:210)
at com.Sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.Java:653)
at com.Sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.Java:314)
at com.Sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.Java:305)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:483)
at Sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.Java:767)
Caused by: Java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
at com.Sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.Java:98)
at com.Sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.Java:128)
at Java.lang.Thread.run(Thread.Java:744)
Exception in thread "main" Java.lang.reflect.InvocationTargetException
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:483)
at Sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.Java:767)
Caused by: Java.lang.RuntimeException: No toolkit found
at com.Sun.javafx.tk.Toolkit.getToolkit(Toolkit.Java:191)
at com.Sun.javafx.application.PlatformImpl.startup(PlatformImpl.Java:210)
at com.Sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.Java:653)
at com.Sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.Java:314)
at com.Sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.Java:305)
Vous devriez consulter ce bogue connexe pour obtenir de l'aide sur la façon de résoudre votre problème. En résumé, les recommandations sont les suivantes:
-Dprism.verbose=true
Je résous ce problème en ajoutant les libswt-gtk-3-Java et gkt3 à mon système.
Vous devez installer OpenJFX:
apt-get install openjfx
puis exécutez le programme.
Le problème peut provenir de votre ancienne version de JRE, qui ne contient pas toutes les bibliothèques nécessaires, telles que libprism_es2.so
ou libglass.so
, qui devrait être situé dans la classe /usr/lib/jvm/Java-8-openjdk-AMD64/jre/lib/AMD64.
To check if this is the issue compile your Main.Java
à partir de la console.
javac Main.Java
Java -Dprism.verbose=true Main
La sortie devrait éventuellement être Java.lang.UnsatisfiedLinkError: Can't load library: /usr/lib/jvm/Java-8-openjdk-AMD64/jre/lib/AMD64/libprism_es2.so
.
Téléchargez le dernier JRE à partir du site Web officiel d’Oracle et copiez le dossier lib sur votre emplacement actuel. Cela devrait suffire.
Cela échouait pour moi parce que je n'avais pas de bibliothèque gtk. Après avoir activé -Dprism.verbose=true
comme mentionné par @assylias
je pourrais trouver et installer les paquets suivants.
Sudo apt-get install libgtk2.0-bin libXtst6 libxslt1.1
Ça corrige le problème
Dans mon cas, il manquait des dépendances 32 bits sur la distribution 64 bits.
Pour moi, la commande suivante a corrigé le problème sous Ubuntu 16.10 (x86-64):
Sudo apt-get install libgtk2.0-0:i386 libxtst6:i386
Questions connexes:
J'ai trouvé une solution qui a fonctionné pour moi, le stacktrace a plus que cette ligne:
Graphics Device initialization failed for : es2, sw.
faites défiler vers le haut et vous trouverez une ligne qui ressemble à suivre:
Caused by: Java.lang.RuntimeException: Java.lang.UnsatisfiedLinkError: Can't load library: /usr/lib/jvm/Java-8-openjdk-AMD64/jre/lib/AMD64/libglass.so
Maintenant, téléchargez le nouveau jdk à partir d’Oracle, copiez le fichier manquant à partir de là dans le dossier où il manque.
Il me manquait 3 fichiers au total que j'ai copiés, cela peut varier d'une personne à l'autre
J'espère que cela aide certains d'entre vous
L'option -Dprism a aidé ensuite à imprimer une liste de fichiers:
Impossible d'ouvrir le fichier d'objet partagé: Fichier ou répertoire introuvable.
Après avoir installé les paquets, cela a fonctionné.
Pour ceux qui utilisent ArchLinux: pacman -Sy Java-openjfx
n'installe pas le package gtk2
nécessaire (GTK3 ne compte pas).
Sur la toute nouvelle installation d'Ubuntu 18.10, j'ai rencontré le même problème lorsqu'un aperçu d'un fichier de démarquage est rendu dans pycharm (édition communautaire).
J'ai téléchargé un JRE Oracle (jre1.8.0_201) et je l'ai utilisé à la place du jre livré avec pycharm, mais j'ai à nouveau le même problème.
Ensuite, nous avons ajouté l'option -Dprism.verbose = true qui a révélé que libgtk-x11-2.0.so.0 était manquant. Enfin, sudo apt-get install libgtk2.0-0 a résolu le problème.
Merci, Paul
Pour ceux qui ont des problèmes avec ce problème avec Eclipse, la solution peut être trouvée en ajoutant -Dprism.verbose=true
aux arguments de la machine virtuelle Java dans la fenêtre "Options de débogage" (comme déjà mentionné dans d'autres réponses). Après cela, les bibliothèques manquantes seront listées dans la console.
Cependant, j'ai résolu simplement le téléchargement et l'installation de Java à partir de la page officielle d'Oracle.
https://www.Java.com/it/download/
Après cela, vous trouverez le dossier Java sous /usr/Java/jre-1.8.X_XXX
(cela dépend de la version que vous avez téléchargée).
Ensuite, ouvrez Eclipse et depuis Fenêtre-> Préférences-> Java-> JRE installés, ajoutez un nouveau JRE en utilisant le chemin mentionné ci-dessus.
Maintenant, set JRE de workspace sur le chemin de génération de votre projet.
Cela devrait fonctionner maintenant.
Vous pouvez également définir le JRE uniquement pour un projet spécifique, dans mon cas, il était plus utile en tant que paramètre général.
Système: Fedora 26 64 bits. (jre1.8.0_144).