Comment intégrer JavaFX dans la vue RCP Eclipse
-
28-10-2019 - |
Question
J'essaye d'utiliser JavaFX 2 à partir d'une simple vue d'éclipse, mais j'obtiens un
java.lang.UnsatisfiedLinkError: URL non valide pour la classe: bundleresource: //435.fwk1827795025/com/sun/glass/utils/NativeLibLoader.class
Après quelques recherches avec JAD, j'ai découvert que NativeLibLoader avait une vérification très intéressante:
if(!classUrlString.startsWith("jar:file:") || classUrlString.indexOf("!") == -1)
throw new UnsatisfiedLinkError((new StringBuilder()).append("Invalid URL for class: ").append(classUrlString).toString());
Cela signifie-t-il que javafx ne peut pas être utilisé à partir du bundle OSGi?Veuillez me prouver le contraire.
La solution
Des mises à jour du chargeur JavaFX pour être plus compatible avec OSGI sont prévues pourla version «Lombard» (qui correspond à la période JavaFX 3.0 , c'est-à-dire 2013).En attendant, vous pouvez rencontrer des problèmes lors de l'utilisation de JavaFX à partir d'un bundle OSGI.D'autres problèmes liés à OSGI peuvent être trouvés en recherchant OSGI dans le JavaFX Jira (tout le monde peut s'inscrire pour voir les bogueset les problèmes énumérés ici). Tom Schindl , le créateur du e (fx) clipse pour JavaFX dans Eclipse, serait le meilleur point de contact avec une expérience dans l'intégration de JavaFX dans Eclipse.
Autres conseils
Je viens de publier un didacticiel pas à pas sur la création et l'exportation d'un Eclipse ViewPart qui utilise JavaFX 2.0.Voir http://www.efxclipse.org/trac/wiki/Tutorial3
e (fx) clipse a maintenant un assistant pour cela.Veuillez jeter un œil à: http://www.efxclipse.org/trac/wiki/Tutorial2
Vous pouvez rapidement tester votre vue avec ce code Hello World:
public class MyViewPart extends FXViewPart {
@Override
protected Scene createFxScene() {
Button btn = new Button();
btn.setText("Say 'Hello World!'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
System.out.println("Hello World!");
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
return new Scene(root,300,200);
}
@Override
protected void setFxFocus() {}
}
Pls.suivez ces étapes simples:
-
Créer un "plugin à partir d'archives JAR existantes" dans Eclipse
- ajouter External ..jre / lib / jfxrt.jar (à partir de jdk1.7)
- cliquez sur Target Platform "an OSGI framework"!
- désélectionnez "Décompresser".
-
Cliquez sur META-INF / MANIFEST.MF - dans l'onglet Runtime Tout exporter Packages (avec "Ajouter").
-
Ajoutez le "Fx_Osgi_Plugin" créé comme plugin requis dans l'onglet "Dépendances" pour chaque plugin.xml.
-
Dans .product, cliquez sur "Ajouter les plug-ins requis" dans l'onglet Dépendances.
Désormais, les plugins utilisant Java-Fx font référence à un Osgi Java-Fx Version.