Débuts en Java

deftones

Membre junior
8 Mars 2004
38
1
Bonjour à tous,

J'ai décidé de me mettre à Java pour un projet. En effet, je le développe chez moi (je programme avec un iBook sous Panther) mais il sera utilisé sur des PCs avec Windows 2000 / XP.

Une tâche importante de ce projet est un affichage graphique. J'utilise les classes Swing et un JPanel pour mes dessins. J'ai fait un premier jet (je dessine pleins de carrés (environ 160) directement à chaque paintComponent) pour voir ce que cela donne et j'ai quelques interrogations.

La JVM Windows et OS X ont elles le même comportement au niveau de Java 2D ? Dans ma version OS X (iBook 933Mhz), je vois le raffraichissement de Panel alors que sur le PC test, aucun soucis (un Dell P4 2,4Ghz).
Est ce la différence de puissance des CPU ou bien sous Windows la JVM fait du double buffer ?
Est ce que j'aurais mon problème avec des PCs moins puissants ? Ou bien cela est vraiment dû à Panther ?
Le double buffer corrigera-t-il ce problème ?

Et la JVM sous Tiger comment se comporte-t-elle ?

Merci de vos réponses :)
 

molgow

Vétéran
Club MacG
4 Janvier 2002
5 494
613
38
Suisse
Bonjour,

Difficile de te répondre avec certitude, mais si j'étais toi je tenterais d'activer le double buffer si ce n'est pas déjà le cas (je me souviens plus si c'est actif par défaut ou non). Je pense qu'il y a des chances que ça aide.
Autrement, il faut aussi savoir que la JVM de Mac OS X est bien plus lente que la Windows (ou que tout autre JVM). Apple ne fait vraiment pas beaucoup d'effort pour fournir une JVM de qualité :( Ce n'est pas un problème de matériel mais d'implémentation logiciel de l'interpréteur.
 

deftones

Membre junior
8 Mars 2004
38
1
Rageant de voir que la JVM sur OS X est si peu optimisée d'un côté et qu'Apple de l'autre n'arrête pas de dire qu'OS X est fait pour le développement Java. Mais cela vient il d'Apple ou bien de Sun qui préfère soigner la version Windows ?
 

molgow

Vétéran
Club MacG
4 Janvier 2002
5 494
613
38
Suisse
La JVM de Mac OS X est développé par Apple et non pas par Sun.

Et oui, c'est très rageant. En plus, Apple est toujours à la traine pour sortir les JVM. Exemple : on a dû attendre plusieurs mois avant d'avoir une première version de Java 1.5 sur Mac... et maintenant, il n'est toujours pas possible de l'utiliser facilement pour un utilisateur "normal"... :rolleyes:

Au moins, Apple a un bon point parce qu'ils développent des JVM conformes aux spécifications de Sun, ce qui n'est pas toujours le cas de Microsoft...
 

deftones

Membre junior
8 Mars 2004
38
1
AArrg , je comprends plus rien.
En allant là: http://developer.apple.com/document...apple_ref/doc/uid/TP40001901-210374-TPXREF136

on lit "In Mac OS X, Java windows are double-buffered. The Java implementation itself attempts to flush the buffer to the screen often enough to have good drawing behavior without compromising performance."
Et vu le résultat, il est clair que pour moi cela ne le fait pas :(

Cela viendrait-il que je compile mon source avec seulement: javac monSource.java ?
Aurais-je un autre comportement si j'utilisais xCode (qui utiliserais des options spéciales ?) ?

Je suis trés intrigué :-\

Je mets en pièce joint les sources.
 

deftones

Membre junior
8 Mars 2004
38
1
J'ai continué un peu mes recherches et voici ce que j'ai constaté. Sur mon P4 actuel, j'ai le phénomène de mon iBook si je désactive le double buffer de mon panel (par setDoubleBuffered (false)).

Ce soir, je tenterai de mettre de le constructeur de ma sous classe de JPanel un setDoubleBuffered (true) pour voir ce que cela donne.

Par contre si cela corrige le problème alors il y a un soucis avec les spécifications de SUN et la JVM d'Apple. En effet, il est bien écrit pour le constructeur JPanel que :

Bloc de code:
public JPanel()  
Creates a new JPanel with a double buffer  and a flow layout.
 

Ptit-beignet

Membre émérite
7 Novembre 2001
630
30
39
Raleigh, NC, ... euh nan ca c'est fini :(
Si je me trompe pas, dans Swing tout est double bufferiser par defaut, ce qui n'est pas le cas de AWT.
J'ai testé un petit bout de code sous OS X avec un new JPanel() bah moi il est doublebufferiser (test avec method isDoubleBuffered) !!
Apres le fait que tu redefinisse la méthode paintComponent, la je pense que ca detruit le double buffer, mais pas sur.
Sinon si ce que tu fais dans ton paintComponent() c'est vraiment du dessin, prefere AWT c'est plus rapide.
A+
Vincent

PS: par contre concernant la JVM de Mac Os X, c'est vrai que c'est bien relou !