1

J'ai un petit problème que je ne comprend pas. Pourquoi ce petit programme ... : public class Test {     public static void main (String[] args)     {         Test ref = new Test2();         ref.f();     }        private void f() { System.out.println ("f() de base"); } } class Test2 extends Test {     public void f() { System.out.println ("f() redéfini"); } }
... retourne 'f() de base' quand on l'exécute, et pas 'f() redéfini' ? Le polymorphisme devrait faire utiliser f() redéfini, et c'est bizarre qu'on ait accès à une méthode privée.

2

Ben, je dirais que la solution est de ne pas surcharger une méthode privée par une méthode publique. Le compilateur ne devrait pas accepter à mon avis. Mais j'ai essayé avec le JDK 1.3.1 et avec "gcj.exe (GCC) 3.2 (mingw special 20020817-1)" et les deux acceptent et font la même chose (afficher "f() de base").

Pour le fait que tu as accès à la méthode privée, c'est normal, parce que tu es dans la classe à laquelle appartient la méthode! Et je pense aussi que c'est ce qui donne le comportement bizarre du lookup de la fonction. Vu que la fonction est privée, le compilateur ne cherche pas à savoir si elle est surchargée quelque part.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3

Ok smile

>c'est normal, parce que tu es dans la classe à laquelle appartient la méthode!
Euh oui, je m'y fais pas trop que le main() soit dans la classe smile

4

A propos de GCJ : quand j'essaie de générer un .exe à partir de la version MinGW avec gcj --main=Test Test.java, j'obtiens :
ld: cannot open crt2.o: No such file or directory
Qu'est-ce qui ne va pas ?

5

Mauvaise version du runtime. Il faut un runtime MSVCRT pour utiliser GCJ, pas CRTDLL.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

6

En ayant copié crtbegin.o, crtend.o et crt2.o dans C:\gcj\lib\gcc-lib\mingw32\3.2, et en demandant à gcj d'aller chercher les libs fournies par Dev-C++ avec gcj --main=Test -LC:\Dev-Cpp\lib\gcc-lib\mingw32\3.2 -LC:\Dev-Cpp\lib Test.java, je n'ai plus l'erreur.
Il n'y a pas un moyen d'éviter de lui fournir tout ça en paramètre, à part en faisant fusionner les dossiers de gcj et Dev-C++ ?

Et en essayant d'exécuter le programme, Windows (95) me retourne l'erreur : Le fichier TEST.EXE est lié à une exportation manquante KERNEL32.DLLsorryignalObjectAndWait sad

7

ExtendeD
: Il n'y a pas un moyen d'éviter de lui fournir tout ça en paramètre, à part en faisant fusionner les dossiers de gcj et Dev-C++ ?

Le package GCJ est fait pour être installé dans le dossier de MinGW.
Et en essayant d'exécuter le programme, Windows (95) me retourne l'erreur : Le fichier TEST.EXE est lié à une exportation manquante KERNEL32.DLLsorryignalObjectAndWait sad

Arrrgh...
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/signalobjectandwait.asp
C'est une fonction spécifique NT. GCJ libjava ne devrait pas utiliser cette fonction sous Windows 95. sad
Sur ce point, à part te dire de reporter un bogue, je ne peux pas t'aider. À la limite, essaye une ancienne version. Celle que j'ai (gcj.exe (GCC) 3.2 (mingw special 20020817-1)) marche très bien ici sous Windows Me, donc je suppose qu'elle n'a pas ce bogue.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

8

En effet l'exécutable fonctionne sur Windows XP.

Pourtant j'utilise la même version de gcj que toi. Le programme compilé est celui du topic.

9

J'ai vérifié, et je vois que la kernel32.dll de Windows Me exporte cette fonction en non-documentée. Bref, ce problème doit se manifester sous Windows 95 et éventuellement 98 seulement.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

10

Ceci est à reporter comme bogue contre libjava, et aussi contre w32api qui déclare cette fonction sans le #if _WIN32_WINNT || (_WIN32_WINDOWS >= 0x0490) (avec éventuellement 0x0410 au lieu de 0x0490, je ne sais pas si Windows 98 comporte cette fonction vu qu'elle n'est pas documentée pour 9x/Me) qu'il faut apparemment.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité