Journal Un projet qui tue pour Java: SwingWT

Posté par  (site web personnel) .
Étiquettes : aucune
0
30
mar.
2004
Tout le monde connait SWT, la librairie graphique libre pour Java cree par IBM et qui est notamment utilise par le projet Eclipse http://eclipse.org/(...)

Cette librairie a pour particularite (contrairement a SWING la librairie graphique standard de Java) d'etre native au systeme: par exemple sous Linux, une application SWT est en fait une application gtk.
L'avantage principale est la rapidite accrue par rapport a SWING.
Pour en savoir plus sur SWT: http://en.wikipedia.org/wiki/SWT(...)

SwingWT http://swingwt.sourceforge.net/(...) est une re-implementation des widgets SWING en SWT.
Ceci apporte qu'en programmant en Java/SWING standard, on peut fournir une application native a l'environnement sans changer une ligne de code. voila un screenshot: http://swingwt.sourceforge.net/ss22.png(...)

L'etat d'avancement du projet ? SwingWT is into beta now - everything seems to work, it has received some good testing, but some items may be missing (Swing is a BIG API after all). There's probably a few bugs still in there as well

Mais la ou cela devient vraiment interessant c'est de coupler GCJ (partie Java de GCC) et SWT. On obtient alors un programme compile natif (plus besoin de la JVM), bref c'est comme du C/gtk ou du C++/Qt en gros mais avec tous les avantages de Java (temps de developpement diminue).

Un developpeur a package SWT, SwingWT et MingW sous windows pour directement pouvoir compiler du code Java/SWING en natif sous Windows. J'ai essaye et ca fonctionne.
http://thisiscool.com/gcc_mingw.htm(...)

Malheureusement je suis bloque par GCJ qui ne gere pas encore tous les packages du JDK 1.4, notamment javax.net.ssl
Mais j'ai pu tout de meme m'amuser (avec des petites demos) avec et c'est carrement plus rapide que le meme programme version SWING + JVM.

Un autre projet amusant mais peut etre moins interessant finalement: http://chrriis.brainlex.com/projects/swtswing/(...)
C'est exactement l'inverse de SwingWT, c'est l'implementation de SWT en utilisant les classes de SWING: on obtient un programme SWT aussi portable que le meme ecrit en SWING.

Bref on va finalement arriver a un Java standard entierement libre et aussi rapide que du C++ grace a GCC et SWT, de la balle non ?
  • # Re: Un projet qui tue pour Java: SwingWT

    Posté par  . Évalué à 1.

    et on risque d'obtenir des binaires aussi gros qu'avec C++ *soupir*
    • [^] # Re: Un projet qui tue pour Java: SwingWT

      Posté par  . Évalué à 1.

      et on risque d'obtenir des binaires aussi gros qu'avec C++ *soupir*

      Allons ! On n'est plus à l'époque du dos et des 640 ko de conventionnelle ! Linux peut gérer des giga-octets de ram ! On va pas pleurer pour quelques dizaines de kilo-octets.
      • [^] # Re: Un projet qui tue pour Java: SwingWT

        Posté par  . Évalué à 1.

        Néanmoins:
        1) chaque utilisateur fait tourner plus de programmes (les os modernes sont multitâches) ; et chaque machine peut recevoir plusieurs utilisateurs (penser à des TX dans une salle de TP, par exemple), donc il faut multiplier les dizaines de kilo-octets par le nombre de programmes et le nombre d'utilisateurs: ça va commencer à faire beaucoup, même si les .so aident à mutualiser;
        2) ce n'est pas parce que les ressources sont moins rares qu'il faut les gaspiller, entre acheter une machine deux fois plus puissantes pour faire la même chose, et une machine deux fois plus puissantes pour faire le double, je choisis le second choix!
      • [^] # Re: Un projet qui tue pour Java: SwingWT

        Posté par  . Évalué à 2.

        sauf que ce sont vite des dizaines de Mo, sans parler de la RAM bouffée derrière, qui va allègrement représenter quelques centaines de Mo...


        à l'époque de Symantec Visual Café (v2) on pouvait déjà générer un executable pour Windows de son projet Java (paquet de classes). mais on se retrouvait avec des .exe énormes : il fallait bien caser le code des classes de base (java.*) quelque part, même s'il était recompilé nativement.


        (ah, je viens de regarder, histoire de rire : le rt.jar d'un JRE 1.4 pèse ses 20 Mo, merci Sun, merci.)
  • # Re: Un projet qui tue pour Java: SwingWT

    Posté par  . Évalué à -1.

    "Malheureusement je suis bloque par GCJ qui ne gere pas encore tous les packages du JDK 1.4"

    Envoie un patch au lieu de perdre du temps a mouler ici :o)
    • [^] # Re: Un projet qui tue pour Java: SwingWT

      Posté par  (site web personnel) . Évalué à 2.

      C'est ce que j'ai commence a faire: j'ai deja reimplemente javax.net mais pas javax.net.ssl -> en gros ca correspond a refaire entierement OpenSSL, avec ca ma these je suis pas pres de la finir !

      Pour repondre a Gniarf (flemme de faire 2 posts)
      > à l'époque de Symantec Visual Café (v2) on pouvait déjà générer un executable pour Windows de son projet Java (paquet de classes). mais on se retrouvait avec des .exe énormes

      Un chti serveur HTTP (donc sans interface graphique) de 500 lignes compile sous Windows avec MingW fait 4Mo mais j'ai pas vraiment (je suis pas sur en fait) reussi a utiliser les librairies dynamiques. Toutes les demos graphiques que j'ai compiles sous Windows faisaient 4Mo environ. Pour comparer, ce meme serveur HTTP compile avec gcj sous Linux fait 67ko et Httpd.o fait 72ko cf: http://tanguy.dyndns.org/communication/httpd/httpd-0.1/(...)

      Moi je pense sincerement que ca peu donner un super bon truc, rien que sur du code tout petit on voit clairement la difference de temps de lancement de l'application grace a gcc et SWING lag meme pour ouvrir une fenetre d'ouverture de fichier, ce qui n'est pas le cas de SWT. Pour la latence au niveau de l'interface graphique, il suffit de lancer Eclipse pour se faire son propre avis (Eclipse utilise la JVM, des builds de Eclipse compiles avec gcj existent mais c'est encore experimental).

      Evidemment ca ne pourra jamais etre aussi rapide et leger qu'un code C, mais faut bien voir aussi qu'en Java on programme a mon avis 5 fois plus vite qu'en C pour au final un code plus clair, modulaire, reutilisable, plus facilement maintenable, portable, moins de ligne de code, moins buggue... tout ceci a un coup (reduit par la montee en puissance des ordinateurs). Bref c'est un compromis.
  • # Re: Un projet qui tue pour Java: SwingWT

    Posté par  . Évalué à 1.

    Swing avait un avantage sur les autres librairies que je connaissais c'était celui de pouvoir une gui réellement multi-plateforme.
    Certes il existe des librairies graphiques multi-plateformes mais à cause des variations des tailles des polices et des différents controles graphiques, un même source compilé sur différentes plateformes donne des résultats pas toujours trés heureux.

    En java, si on n'y fait pas gaffe, là aussi les labels peuvent dépasser, les controles peuvent se chevaucher etc. Par contre, il y a la classe GridBagLayout qui permet de tout définir en relatif et grace à ça, la même interface peut tourner sur n'importe quel systeme. C'est même trés pratique pour localiser l'interface car on peut faire varier la taille des labels.

    J'espère que cette classe est bien gérée dans ce projet.
    • [^] # Re: Un projet qui tue pour Java: SwingWT

      Posté par  . Évalué à 1.

      Tous les layouts de java sont relatifs, pas seulement le gridbaglayout. Tu le saurais si tu avais déjà fait un peu de java.
      • [^] # Re: Un projet qui tue pour Java: SwingWT

        Posté par  . Évalué à 1.

        Tous les layouts de java sont relatifs, pas seulement le gridbaglayout. Tu le saurais si tu avais déjà fait un peu de java.

        J'en ai fait 1 an et demi en entreprise (+2 ans à la fac) et je t'assure qu'en dehors du GridBagLayout, il n'y a pas moyen de faire une gui portable. J'ai du souvent jonglé entre Windows et Linux et je t'assurre que mes collègues et moi ont laissé tombé les autres layouts à force d'essayer. Les autres layouts sont peut-être relatifs mais c'est le seul qui donne de bons résultats sur ces aspects.
        Attention, ce que j'affirme n'est valable que dans le cas d'interface redimensionnables. Si vous faites une interface où tout les controles graphiques sont à taille fixe, là d'autres layouts peuvent suffirent mais ça serait dommage de ne pas profiter de cet avantage.

        Par contre il est plus dur à maitriser que les autres, heureusement qu'il y a des designers graphiques.
    • [^] # Re: Un projet qui tue pour Java: SwingWT

      Posté par  . Évalué à 1.

      J'espère, GridBagLayout c'est quand même de base, je l'utilisais déjà en AWT avec Java 1.1.
  • # Re: Un projet qui tue pour Java: SwingWT

    Posté par  . Évalué à 1.

    Le trio java + SWT + GCJ est utilisé, avec pas mal de réussite semble-t-il, par le futur client graphique de mldonkey : MLdonkey G2gui qui sort aujourdh'ui dans la version 0.3.0-pre1 Released.

    http://mldonkey.berlios.de/(...)


    mldonkey, c'est de la bal.
    java, c'est de la bal.
    swt, c'est de la bal.
    gcj, c'est de la bal.

    Alors les 4 ensembles....
  • # Re: Un projet qui tue pour Java: SwingWT

    Posté par  (site web personnel) . Évalué à 1.

    J'ai hate de voir un portage jedit ou posseidon en natif :-)

    Axel
    • [^] # Re: Un projet qui tue pour Java: SwingWT

      Posté par  (site web personnel) . Évalué à 1.

      > J'ai hate de voir un portage jedit ou posseidon en natif

      C'est pas un portage, c'est une recompilation* :-)
      C'est justement la l'interet de la chose!

      * sous reserve que gcj gere les classes que le programme utilise, sinon il faut contribue a gcj et classpath.
  • # Re: Un projet qui tue pour Java: SwingWT

    Posté par  . Évalué à 2.

    Moi je trouve que c'est tout de même une très bonne initiative, ce dont personne ne semble se soucier.

    Ca permet d'avoir une appli qui colle "plus" systeme , tout en étant transparent pour l'utilisateur.

    De plus le fait de développer des "optimisations" comme ca (meme si elles peuvent dans certains cas être plus lourdes) , et qui tournent bien et ont du succès, ca peut peut etre pousser sun a se rendre compte qu'il peut y avoir un "bénéfice" à rendre le Java réellement libre, pour le faire évoluer plus vite.
    • [^] # Re: Un projet qui tue pour Java: SwingWT

      Posté par  . Évalué à 1.

      mon souvenir c'est que eclipse c'est bien sous win et ca laggue un peu sous linux (à cause de swt ?)

      Vous avez essayer java 1.5.0beta1? Rien que sous linux c'est plus joli(?) et un chouïa plus rapide.
      Plus besoin de bidouiller le fichier $JAVA_HOME/jre/lib/fonts/fonts.dir pour qu'il utilise des ttf. Ouf

      Bien le bonjour à Pierre Tramo !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.