Accueil > Non classé > JavaFX a-t-il un avenir ?

JavaFX a-t-il un avenir ?

Vous en avez certainement déjà entendu parler, Sun a lancé il y a un peu plus d’un an la première version stable d’une technologie qui a pour but de concurrencer Flex et Silverlight dans le monde des RIA : JavaFX. Deux versions mineures sont apparues depuis, apportant des points vitaux : le support théorique des appareils mobiles (voir la suite) et un SDK sous Linux. Pourtant, lorsqu’on parle de JavaFX à son entourage, beaucoup connaissent de nom mais personne ne semble l’avoir utilisé ni même ne connait quelqu’un qui en fait. Dans cet article, je vous propose un état des lieux de la technologie, de l’utilisation que l’on peut en faire ainsi que de ses possibilités futures.

about:JavaFX

header_logoJavaFX est une technologie se voulant simple mais puissante. Basée sur la machine virtuelle Java, elle est théoriquement déployable sur des milliards (!) d’appareils fixes ou mobiles, allant de l’ordinateur de bureau aux téléphones en passant par les télévisions. Il est également possible d’utiliser tout ou partie de J2SE, selon la plateforme cible ; il sera par exemple possible de faire des applications desktop utilisant des composants Swing (mais pas sur les appareils mobiles). Les possibilités sont ainsi impressionnantes, puisque théoriquement toutes vos briques préférées sont réutilisables.

Malgré le fait que l’on retrouve souvent les deux dénominations “JavaFX” et “JavaFX Mobile”, il n’y a bel et bien qu’une seule techno derrière JavaFX : There is no JavaFX Mobile. There is only JavaFX. En revanche, il existe des profiles, qui permettent de cibler son application pour un environnement ou un autre :

  • Le profil common permet de lancer son application sur n’importe quel environnement : ordinateur, téléphone mobile, télévision, machine à café etc.
  • Le profil desktop ajoute des fonctionnalités plus “riches” à common, comme la possibilité d’ajouter de jolis effets graphiques ou de manipuler des composants Swing.

Un nouveau langage

JavaFX introduit un nouveau langage, le JavaFX scripting language, assez proche de l’ActionScript 3 de Flex. Malgré son nom, ce n’est pas un langage de scripting, dans le sens “code interprété”, mais bien un langage compilé en bytecode pour la JVM. Voici quelques points notables vis-à-vis d’AS3 :

  • Le compilateur fait de l’inférence de types, c’est-à-dire qu’il n’est pas nécessaire de déclarer le type d’une variable, le compilateur le devinera automatiquement en fonction de ce qu’on lui assigne.
  • L’instanciation d’objets peut se faire avec le mot-clé new ou avec une syntaxe avec accolades :
    1
    toto = Toto { attribut1: "valeur1", attribut2: 2.0, attribut3: "plop" };
  • Il est possible d’insérer directement des expressions au sein d’une chaine de caractères :
    1
    2
    temp = 8.0;
    maString = "Il fait {temp}°C dehors.";
  • De nouveaux types sont présents, parmi lesquels : Duration (pratique pour temporiser des animations), sequence (une sorte de “super-tableau”, très pratique avec les mots-clé insert et delete, et avec lequel on peut facilement manipuler des sous-ensembles de séquences)

Si vous êtes intéressés par ce nouveau langage, vous pouvez trouver de très bons tutoriels sur le site de JavaFX.

Au niveau des performances, elles semblent avoir été grandement améliorées dans la version 1.2 du framework. Des conseils sur l’amélioration des performances et du temps de démarrage sont également facilement trouvables. En regardant les différents exemples de RIA JavaFX, j’avoue être assez bluffé par leur rapidité d’exécution et leur rendu visuel (comparé à une bonne vieille applet des années 90 ;)).

Un bon environnement de développement

Pour développer de jolies RIA JavaFX, plusieurs solutions sont possibles. D’abord, “la pipe et le couteau”, à savoir un bon vieil éditeur de texte et un shell pour lancer le compilateur, javafxc. Sinon, pour les plus flemmards (NDPY : et les plus productifs !), soit la majorité des développeurs, il existe un plugin Eclipse, ou mieux, un plugin Netbeans. Les deux proposent un bon support pour commencer : coloration syntaxique, auto-complétion, débogage, ajout de composants graphiques par glisser-déposer : on glisse un “composant” directement dans le code source, ce qui va ajouter le morceau de code source correspondant (différent du WYSIWYG).

Netbeans apporte en plus le JavaFX Composer, qui permet de créer ses interfaces graphiques en WYSIWYG :

Exemple dutilisation du Composer

Exemple d'utilisation du Composer

Sun étant derrière Netbeans, il est plus ou moins logique qu’Eclipse soit un peu en “retard” au niveau du support de JavaFX, étant donnée la jeunesse de la technologie.

Pour les designers, il y a la Production Suite, une suite d’outils qui s’intègrent à Illustrator ou Photoshop et qui permettent d’exporter des contenus graphiques au format fxz (JavaFX Content File).

Une facilité de déploiement ?

Code once, run everywhere?

Code once, run everywhere?

Le développement en lui-même ne pose pas trop de problème. Si l’on développe avec le profil common, il est possible de tester son application dans une fenêtre classique ainsi que dans plusieurs types d’émulateurs de téléphones mobiles (dont un avec un touch screen).

En revanche, lors du déploiement ça se corse un peu (non, ça ne va pas exploser :-P). Pour les applications desktop, aucun souci puisqu’on peut choisir entre une application “classique”, tournant dans un navigateur ou déployée par Java Web Start. Au niveau de l’utilisateur final, il doit simplement disposer d’un JRE 1.5+ pour faire fonctionner JavaFX.

Par contre, pour déployer son bébé sur un téléphone mobile, si l’on en croit la FAQ, il faut qu’il y ait un runtime JavaFX installé :

Sun is working with Mobile Device Manufacturers and Mobile Operators to enable out of the box support for JavaFX content by preloading the JavaFX Mobile runtime with their devices.

Parfait donc, mais quid des téléphones qui n’ont pas encore le runtime installé ? Eh bien pour l’instant, le seul runtime que j’aie trouvé en téléchargement est pour Windows Mobile… Quelques articles ou vidéos mentionnent JavaFX sur Android, mais si l’on essaye de chercher plus loin et savoir comment installer un runtime pour exécuter son application… c’est pas gagné.

Les milliards d’appareils supportant Java ne seraient pas tous prêts à accueillir JavaFX, alors ? C’est la question que je continue de me poser ; après avoir fait pas mal de recherches sur le sujet, les infos semblent difficiles à trouver. En tout cas, le marketing de Sun a bien fonctionné, j’ai cru un moment que mon téléphone portable dernier cri m’ouvrirait de nouveaux horizons…

Enfin, en attendant une réelle possibilité de déploiement sur mobiles, il reste toujours l’émulateur :D (mais que sous Windows).

Et dans le monde de l’entreprise, alors ?

Des efforts commencent à être visibles pour apporter à JavaFX la boite à outils que l’on retrouve dans beaucoup de projets Java dans le monde de l’entreprise :

  • Un plugin Maven 2 permet de compiler et de générer des fichiers JNLP pour le déploiement avec Java Web Start.
  • Il semble être possible d’utiliser JUnit dans du code JavaFX (mais il faut parfois ruser avec un ou deux hacks).
  • Comme les projets Netbeans sont par défaut gérés par Ant, il est possible d’utiliser Hudson pour faire de l’intégration continue. En utilisant un job free-form, on peut facilement lancer une tâche Ant.
  • Toutes vos bibliothèques préférées sont potentiellement réutilisables dans votre code JavaFX (surtout les méthodes dans Utils.java :)).

Hello world

Après toutes ce blabla, je suis sûr que vous mourez d’impatience de voir un hello world, juste pour voir ce qu’on peut faire en JavaFX entre deux corrections de bugs :

(Le code est disponible sur le projet googlecode si vous souhaitez le parcourir)

Conclusion

Faut-il se lancer dans JavaFX ? Je suis tenté de répondre “ça dépend”, puisqu’effectivement ça dépendra de votre projet. Si vous avez besoin d’une RIA et que vos développeurs ne maitrisent ni Flex ni Silverlight, il peut être intéressant de se pencher sur le cas JavaFX. Les avantages seront de pouvoir réutiliser une partie du code Java déjà existant par exemple, ou bien encore de bénéficier d’un bon IDE Open Source (pas facile à trouver en Flex).

Si vous attendez que JavaFX dispose d’une multitude d’outils et d’une bonne réputation avant de l’utiliser, je vous propose de réfléchir à cette théorie : si tout le monde attend que les autres se lancent dans l’utilisation d’une techno, celle-ci ne risque pas d’évoluer très vite, et on ne verra jamais un bon support ni de bons outils qui feront son succès.

Alors certes, l’argument de la “portabilité ultime” invoqué par Sun est contestable, notamment sur les plateformes mobiles. Mais après tout, on peut toujours espérer que les choses changeront…

Références

Share
  1. Paul PODGORSEK
    01/02/2010 à 17:07 | #1

    JavaFX semble en effet être très prometteur mais, un an et demi après la sortie de la première version du SDK, la communauté n’est pas très active. Les mailing lists officielles sont quasi mortes (une trentaine d’emails en 4 mois), et la plupart des échanges se font sur des forums tiers.

    Un mauvais point à son développement : normalement, JavaFX devait fonctionner sur tous les nouveaux BlackBerry, mais à la dernière minute il y a eu un changement en faveur de Flash (http://ablog.apress.com/?p=1539). De plus, les lecteurs BluRay Sony devaient pouvoir gérer les applications JavaFX, mais il semble que ça n’est toujours pas le cas à l’heure actuelle.

    Malgré cela, on peut souligner le fait que JavaFX introduit une refonte de la JavaDoc (javafxdoc) : pas mal de JavaScript vient le rendre plus clair et aide à la navigation, mais on n’aime pas forcément… (perso, je préfère la JavaDoc ancienne version :-)).

    J’avais commencé un petit tuto d’utilisation de JavaFX avec Maven pour ceux que ça intéresse :
    http://sourceforge.net/apps/mediawiki/jfxpictureview/index.php?title=Using_Maven_2_with_JavaFX

    On verra bien dans les mois qui arrivent si la communauté s’active un peu plus autour de cette techno…

  2. 01/02/2010 à 17:42 | #2

    @Paul PODGORSEK
    Merci pour ce témoignage, puisqu’il semble que tu as déjà fait du dév JafaFX. Ca confirme donc l’impression générale que j’ai eue au niveau des (im)possibilités de déploiement sur des plateformes un peu plus exotiques.

    Personnellement, j’aime bien le côté dynamique des rapports javafxdoc, en plus du visuel qui est assez sympa (cf http://openjfx.java.sun.com/current-build/doc/api/index.html par exemple).

    Peut-être que ce qu’il manque, c’est un peu plus de publicité sur ce qu’il y a autour de JavaFX en lui-même, l’intégration à Maven, des bibliothèques, etc.

  3. Paul PODGORSEK
    01/02/2010 à 21:11 | #3

    @Bastien JANSEN
    Nous avons tous les deux oublié un point énorme : il est possible de définir le style des applications JavaFX en CSS !

  1. 30/01/2010 à 13:39 | #1