tu peux me donner la stacktrace stp ?
Version imprimable
tu peux me donner la stacktrace stp ?
Voici la stacktrace :
Citation:
java.lang.NullPointerException
at org.eclipse.jface.dialogs.DialogPage.setVisible(DialogPage.java:470)
at com.eclipse.rcp.jlistconf.view.Parametrages.showPage(Parametrages.java:262)
at com.eclipse.rcp.jlistconf.view.Parametrages.nextPressed(Parametrages.java:193)
at com.eclipse.rcp.jlistconf.view.Parametrages.buttonPressed(Parametrages.java:174)
at com.eclipse.rcp.jlistconf.view.Parametrages$3.widgetSelected(Parametrages.java:149)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at com.eclipse.rcp.jlistconf.Application.start(Application.java:20)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
at org.eclipse.equinox.launcher.Main.run(Main.java:1408)
at org.eclipse.equinox.launcher.Main.main(Main.java:1384)
ok, ce qu'il manque c'est le control dans la page
il n'est créé qu'à la demande, modifie showPage de cette matnière :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public void showPage(IWizardPage page) { if (page != currentPage) { IWizardPage old = currentPage; currentPage = page; Control pageControl=currentPage.getControl(); if ( pageControl==null ) { currentPage.createControl(container); pageControl = currentPage.getControl(); } layout.topControl = pageControl; if( old != null ) { old.setVisible( false ); } currentPage.setVisible( true ); container.layout(); update(); } }
Ok je n'ai plus l'exception. Par contre d'après mes tests la page change mais les composants restent les mêmes.
à la place de container.layout() dans showPage essaye juste de faire
getShell().layout(true, true);
juste pour voir
Ca affichait la seconde page mais en dessous de la première (lorsque je clique sur next). Au final tous les composants sont sur la même page.
y'a un problème de layout quelque part, faut que tu me redonnes le code de ta méthode createPartControl(Composite parent) de ta vue
Ouai.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 public void createPartControl(Composite parent) { viewcomposite = new Composite (parent, SWT.NONE); viewcomposite.setLayout(new GridLayout()); container = new Composite(viewcomposite, SWT.NONE); layout = new StackLayout(); container.setLayout(layout); myWizard = new MyWizard(container){ @Override public IWizardContainer getContainer() { return Parametrages.this; } }; myWizard.addPages(); parent.addDisposeListener( new DisposeListener() { public void widgetDisposed(DisposeEvent e) { myWizard.dispose(); } } ); showStartingPage(); GridData buttonBarGD = new GridData(GridData.FILL_HORIZONTAL); buttonBarGD.grabExcessVerticalSpace = true; buttonBarGD.horizontalIndent = 640; createButtonBar(viewcomposite).setLayoutData(buttonBarGD); }
tout est ok dans cette méthode.
donc le problème vient de ta création de page, je vois pas autre chose
tu as des classes (une par page, donc par étape) qui étendent directement WizardPage ou mieux une classe du genre :
avec une méthode du genre :Code:
1
2 public abstract class AbstractWizardPage extends WizardPage { }
et dans l'implémentation,Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 public void createControl(Composite parent) { // attention : il est important de ne pas modifier le layout de parent, puisqu'il s'agit du composite référencé par container dans la vue, donc un composant qui doit rester layouté par un stacklayout Composite control = new Composite( parent, SWT.NONE ); // par défaut, on met un FillLayout, mais la méthode createPageControls peut modifier ce layout en fonction de ses besoins control.setLayout(new FillLayout()); // on délègue la construction des composants de la page à une sous méthode createPageControls( control ); // mandatory setControl( control ); } protected abstract void createPageControls(Composite pageComposite);
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public class MyPage1 extends AbstractWizardPage { ... protected void createPageControls(Composite pageComposite) { // ici on peut modifier le layout global de la page, par exemple un TableColumnLayout // pageComposite.setLayout(new TableColumnLayout()); table = new Table(pageComposite,...); ... } }
Bhe ouai :s
Par exemple pour ma première page j'ai ça :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 public class MyPageOne extends WizardPage { private Text textLieu = null; private Text textMat = null; private Label labelListMat = null; private Table tableMat = null; private Composite parent = null; private Composite container; private ParametrageControllerWPageOne parametrageControllerWPageOne = null; public MyPageOne(Composite container) { super("First Page"); parametrageControllerWPageOne = new ParametrageControllerWPageOne(this); this.container = container; } public void createControl(Composite parent) { System.out.println("1er Page"); setTitle("Sélection du lieu de l'affaire"); setDescription("Wizard jListConf. Sélection de l'affaire"); this.parent = this.container; GridLayout layout = new GridLayout(); container.setLayout(layout); layout.numColumns = 3; layout.marginLeft = 300; Label labelTitre = new Label(container,SWT.NONE); labelTitre.setText("Sélection du lieu de l'affaire et des matrices de test"); labelTitre.setFont(new Font(null,"Arial",14,0)); GridData titreGD = new GridData(GridData.FILL_HORIZONTAL); titreGD.horizontalSpan = 3; titreGD.heightHint = 70; labelTitre.setLayoutData(titreGD); Label labelLieu = new Label(container, SWT.NONE); labelLieu.setText("Lieu de l'affaire : "); labelLieu.setFont(new Font(null,"Arial",10,0)); labelLieu.setToolTipText("Indiquer le dossier racine de l'affaire"); textLieu = new Text(container, SWT.BORDER); textLieu.setText("Chemin de l'affaire"); textLieu.setFont(new Font(null,"Arial",10,0)); textLieu.setEditable(false); GridData affaireGD = new GridData(GridData.CENTER); affaireGD.widthHint = 300; textLieu.setLayoutData(affaireGD); Button btnLieuAffaire = new Button(container, SWT.NONE); btnLieuAffaire.setText("..."); btnLieuAffaire.addSelectionListener(new AffaireSelectionListenerW(parametrageControllerWPageOne)); Label labelMat = new Label(container, SWT.NONE); labelMat.setText("Lieu des matrices de test : "); labelMat.setFont(new Font(null,"Arial",10,0)); labelMat.setToolTipText("Indiquer le dossier racine des matrices de test"); textMat = new Text(container, SWT.BORDER); textMat.setText("Chemin des matrices de test"); textMat.setFont(new Font(null,"Arial",10,0)); textMat.setEditable(false); affaireGD.widthHint = 300; textMat.setLayoutData(affaireGD); Button btnLieuMat = new Button(container, SWT.NONE); btnLieuMat.setText("..."); btnLieuMat.addSelectionListener(new MatSelectionListenerW(parametrageControllerWPageOne)); // Required to avoid an error in the system setControl(container); setPageComplete(false); } ... }
this.container, c'est le container de ton wizardCode:
1
2
3
4
5
6 this.parent = this.container; GridLayout layout = new GridLayout(); container.setLayout(layout); layout.numColumns = 3; layout.marginLeft = 300;
tu changes son layout en faisant :
et il faut pas : c'est le container de toutes les pages, il a son propre layout (un stacklayout, parce qu'il a plusieurs pages à afficher alternativement) et il contient des pages qui ont chacune leur layout,Code:
1
2 GridLayout layout = new GridLayout(); container.setLayout(layout);
après tu fais :
tu créés ton label directement dans le wizard, pas dans la pageCode:Label labelTitre = new Label(container,SWT.NONE);
il faut faire
ou parent est l'argument de la méthode createControlCode:Label labelTitre = new Label(parent,SWT.NONE);
tu peux faire bien sur :
Code:
1
2 Composite comp = new Composite(parent,SWT.NONE); Label labelTitre = new Label(comp,SWT.NONE);
c'est parce que tu les créés dans container que tous tes composants de toutes tes pages finissent par apparaître les uns en dessous des autres dans le container
Ah d'accord.
Du coup j'ai fait ça :
Bon par contre plus rien de s'affiche. Du moins la première page.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 public void createControl(Composite parent) { System.out.println("1er Page"); setTitle("Sélection du lieu de l'affaire"); setDescription("Wizard jListConf. Sélection de l'affaire"); this.parent = parent; comp = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); comp.setLayout(layout); layout.numColumns = 3; layout.marginLeft = 300; Label labelTitre = new Label(comp,SWT.NONE); labelTitre.setText("Sélection du lieu de l'affaire et des matrices de test"); labelTitre.setFont(new Font(null,"Arial",14,0)); GridData titreGD = new GridData(GridData.FILL_HORIZONTAL); titreGD.horizontalSpan = 3; titreGD.heightHint = 70; labelTitre.setLayoutData(titreGD); Label labelLieu = new Label(comp, SWT.NONE); labelLieu.setText("Lieu de l'affaire : "); labelLieu.setFont(new Font(null,"Arial",10,0)); labelLieu.setToolTipText("Indiquer le dossier racine de l'affaire"); textLieu = new Text(comp, SWT.BORDER); textLieu.setText("Chemin de l'affaire"); textLieu.setFont(new Font(null,"Arial",10,0)); textLieu.setEditable(false); GridData affaireGD = new GridData(GridData.CENTER); affaireGD.widthHint = 300; textLieu.setLayoutData(affaireGD); Button btnLieuAffaire = new Button(comp, SWT.NONE); btnLieuAffaire.setText("..."); btnLieuAffaire.addSelectionListener(new AffaireSelectionListenerW(parametrageControllerWPageOne)); Label labelMat = new Label(comp, SWT.NONE); labelMat.setText("Lieu des matrices de test : "); labelMat.setFont(new Font(null,"Arial",10,0)); labelMat.setToolTipText("Indiquer le dossier racine des matrices de test"); textMat = new Text(comp, SWT.BORDER); textMat.setText("Chemin des matrices de test"); textMat.setFont(new Font(null,"Arial",10,0)); textMat.setEditable(false); affaireGD.widthHint = 300; textMat.setLayoutData(affaireGD); Button btnLieuMat = new Button(comp, SWT.NONE); btnLieuMat.setText("..."); btnLieuMat.addSelectionListener(new MatSelectionListenerW(parametrageControllerWPageOne)); // Required to avoid an error in the system setControl(comp); setPageComplete(false); }
tu veux dire rien ne s'affiche sauf la première page ?Citation:
Bon par contre plus rien de s'affiche. Du moins la première page.
ou rien ne s'affiche de la première page ?
je vois pas trop pourquoi rien ne s'afficherait,
bon tu met 300px de marge, ça fait beaucoup, mais je suppose que tu affiche ton workbench sur plus de 300px de large (sinon forcément tous tes composants sont en dehors de ta fenêtre).
par contre je vois que tu recycle affaireGD sur textLieu et textMat : il faut absolument utiliser des instances différentes de GridData pour des composants différents (il y a un cache dans GridData que GridLayout exploite)
essaye d'enlever tous tes hints déjà pour voir si tes composants ne sortent pas de la partie visible de ta vue
Non, toujours pareil rien ne s'affiche sur la première page.
en général, quand quielquechose ne s'affiche pas c'est qu'il y a un problème de layout quelquepart
c'est très difficile à déboguer ou à tracer.
bon à priori tu passes bien par ta méthode createControl de ta page, puisque que à un moment tu as eu quelque chose d'affiché.
moi quand c'est comme ça, je rajoute un background différent sur chacun des composites que je créé, pour voir à partir de quel niveau le layout n'est pas bon
commence par en mettre sur les composites crées dans ta vue
avec des couleurs différentes bien marquées (SWT.COLOR_RED, SWT.COLOR_BLUE par exemple) tu verras rapidement quel composite n'est pas bien layoutéCode:compositeTruc.setBackground(compositeTruc.getDisplay().getSystemColor(SWT.COLOR_xxx));(
Donc le container "container" qui doit contenir les éléments des pages est bien créée mais elle est vide.
Par contre dans createControl j'ai colorié comp en jaune et il n'apparait pas.
Pourtant j'y rentre bien vu que j'affiche "1er Page"
si tu passes en debug, avec un breakpoint dans la méthode showPage, au début de ce bloc :
tu dois pouvoir voir :Code:
1
2
3
4
5 Control pageControl=currentPage.getControl(); if ( pageControl==null ) { currentPage.createControl(container); pageControl = currentPage.getControl(); }
- si tu passes bien là
- ce que vaut pageControl
- si createControl est appelé
- si pageControl vaut null ou pas après l'appel de currentPage.createControl(container)
- si topControl de layout prend bien comme valeur la référence pageControl
Le truc c'est que maintenant le bouton next est grisé du coup je ne peux pas cliquer dessus et donc entrer dans showpage à cet endroit là.
tu as au moins la première page qui s'affiche, puisqu'on a
Code:
1
2
3
4
5
6 IWizardPage startingPage = myWizard.getStartingPage(); if (startingPage == null) { } else { startingPage.createControl(parent); showPage(startingPage); }
code que tu as dû déplacé de createPartControl(Composite parent) de ta vue vers ta méthode
ensuite si le bouton next est grisé c'est que tu as fait un setPageComplete(false) après ta construction de page, ce qui est bien (si tu as des informations obligatoires en saisie dans cette page)Code:showStartingPage();
ensuite tu dois géré la détection de la saisie (en mettant des évenements sur des Text (et peut être ta table si tu y mets des éditeurs), et appeler setPageComplete(true) ou setPageComplete(false) en fonction du fait que tous tes champs sont remplis ou non, et ton bouton next sera grisé ou pas en fonction
pour tes tests tu peux forcer setPageComplete(true) au début, comme tu n'exploites aucune saisie, ça te permet de faire défiler toutes tes pages jusqu'à la fin pour vériifier que tout est ok
La première page est créée mais rien ne s'affiche je ne peux donc pas la compléter pour passer à la suite.
mais avec le système des couleurs, quel composite tu vois et lesquels tu vois pas
si j'ai bien compris tu vois container mais pas viewcomposite c'est ça ?
en déboguant ,tu passes bien dans ta méthode createControl de ta page ? et tu as bien ton composant comp qui se créé (tu passes bien par comp = new Composite(parent, SWT.NONE) ?
tu as mis une couleur bien voyante sur comp et tu ne le vois toujours pas ?
si non, essaye de jouer avec la taille de ta fenêtre à la souris, cela va provoquer un redraw, un relayout et autre. si tes composants s'affichent à partir de ce moment, y'a vraiment un schmilblick avec le layout
soit le layout n'est pas bien recalculé (donc le layout() qu'on appelle dans showStartingPage() n'a pas d'effet : il faut donc relayouter un composant au dessus
soit c'est tout simplement les changement de taille de la vue qui ne sont pas pris en compte : dans ce cas, il faut utiliser un ControlListener et relayouter sur le controlResized
Alors je vois veiwComposite qui prend toute la fenêtre et container qui prend une petite partie. Par contre après je ne vois pas comp. Sauf quand j'appelle createControl avec viewcomposite et non container.
Edit : Par contre c'est bizarre je ne vois pas les éléments présents dans comp (ni comp d'ailleurs car sa couleur ne s'affiche pas). Mais quand je modifie certains éléments présent dans comp (comme par exemple ajouter ou enlever des colonnes du GridLayout) et bhe le container grossis ou rapetit.
On devrait avoir ça :
█████████████████████████████████████
█████████████████████████████████████
█████████████████████████████████████
█████████████████████████████████████
█████████████████████████████████████
█████████████████████████████████████
█████████████████████████████████████
avec en vert viewcomposite
en rouge container
en bleu comp
et tu obtiens en gros ça :
█████████████████████████████████████
█████████████████████████████████████
█████████████████████████████████████
█████████████████████████████████████
█████████████████████████████████████
█████████████████████████████████████
c'est donc les layout de viewcomposite et de container qui ne vont pas
tu as bien ça dans createControl de ta vue :
Code:
1
2
3
4
5
6 viewcomposite = new Composite (parent, SWT.NONE); viewcomposite.setLayout(new GridLayout()); container = new Composite( viewcomposite, SWT.NONE ); layout = new StackLayout(); container.setLayout(layout);
aucun viewcomposite.setLayoutData(xxxx)
si c'est le cas, lorsqu'on change topControl de layout (dans showPage), le layout de viewcomposite ne se refait pas
juste après on a l'appel qui fait le relayout, au début on avait :
je t'ai fait essayé getShell().layout(true,true) à la place...tu as bien essayé ça ? et ça ne marche toujours pas ?Code:container.layout();
Voilà mon createControl de ma vue :
Sinon oui tes dessins représentent bien la chose. J'ai bien le second, sauf que le rectangle rouge prend autant de place que le premier dessin, comme si des choses étaient dedans mais sans apparaître.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 public void createPartControl(Composite parent) { viewcomposite = new Composite (parent, SWT.NONE); viewcomposite.setBackground(viewcomposite.getDisplay().getSystemColor(SWT.COLOR_RED)); viewcomposite.setLayout(new GridLayout()); container = new Composite(viewcomposite, SWT.NONE); container.setBackground(container.getDisplay().getSystemColor(SWT.COLOR_BLUE)); layout = new StackLayout(); container.setLayout(layout); myWizard = new MyWizard(container){ @Override public IWizardContainer getContainer() { return Parametrages.this; } }; myWizard.addPages(); parent.addDisposeListener( new DisposeListener() { public void widgetDisposed(DisposeEvent e) { myWizard.dispose(); } } ); showStartingPage(); GridData buttonBarGD = new GridData(GridData.FILL_HORIZONTAL); buttonBarGD.grabExcessVerticalSpace = true; buttonBarGD.horizontalIndent = 640; createButtonBar(viewcomposite).setLayoutData(buttonBarGD); }
ah, comme tu disais que tu voyais un petit bout de container je croyais que c'était le layout de container qui allait pasCode:Sinon oui tes dessins représentent bien la chose. J'ai bien le second, sauf que le rectangle rouge prend autant de place que le premier dessin, comme si des choses étaient dedans mais sans apparaître.
donc c'est à l'intérieur de container que ça va pas
or l'intérieur de container est layouté par un stacklayout dont on conserve la référence en variable membre de la classe de vue
tu ne te sers pas de cette variable layout pour autre chose, tu le modifies pas ni rien ?Code:layout = new StackLayout();
le seul autre code qui manipule layout c'est la méthode showPage
avec
ça me rappelle un problème que j'ai eu par ailleursCode:layout.topControl = currentPage.getControl();
pour le résoudre j'ai dû écrire une classe comme ça :
essaye avec cette classe, en remplaçant le StackLayout de SWT par celui là lorsque tu fais :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 package /*xxxx*/; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Composite; /** * Version de StackLayout dont la taille est celle du composant top, et non pas la taille du plus grand composant * * * @author jdrigo * */ public class StackLayout extends org.eclipse.swt.custom.StackLayout { protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) { int maxWidth = 0; int maxHeight = 0; if ( topControl!=null ) { Point size = topControl.computeSize(wHint, hHint, flushCache); maxWidth = size.x; maxHeight = size.y; } int width = maxWidth + 2 * marginWidth; int height = maxHeight + 2 * marginHeight; if (wHint != SWT.DEFAULT) width = wHint; if (hHint != SWT.DEFAULT) height = hHint; // si un composant fait 0 alors il fait DEFAULT_x (soit 64) donc un composant peut faire 1 de haut mais pas 0 !!! if ( width==0 ) { width=1; } if ( height==0 ) { height=1; } return new Point(width, height); } }
Code:layout = new StackLayout();
En remplaçant avec ton stackLayout ça me créé un container tout petit (un point).
Sinon mon layout je ne le modifie nul part quoi.
donc c'est qu'il n'y a soit rien dans ta page (aucun composant), soit que le layout de ta page a un problèmeCitation:
En remplaçant avec ton stackLayout ça me créé un container tout petit (un point).
je vois pas trop ou est le problème
j'ai créé un petit poc en reprenant les bouts de code que tu as posté, et ça marche :
vérifie bien tout par rapport au TestLayout que je t'ai envoyé (déjà si ça marche chez toi en direct)
tu es sous quel os ?
sinon je crois que je vais soit repartir de ton code, soit refaire tout bien clean à partir de zéro ce week end pour en avoir le coeur net.
autre chose, rien à voir avec le layout, mais ne crée pas de resource SWT sans les disposer :
toutes tes polices que tu créés avec des
consomme des handles qui ne sont libérés que quand tu arrête ta machineCode:labelTitre.setFont(new Font(null,"Arial",14,0));
utilises plutôt une FontRegistry
Ton test fonctionne aussi chez moi.
Je travaille sous Win XP.
si mon poc marche aussi chez toi, il y a forcément une différence quelque part.
J'ai modifié mon showStartingPage ainsi que ShowPage. Et maintenant ça marche :)
Bon j'ai quelque soucis de mise en page que je vais devoir régler mais j'ai l'impression que ça fonctionne. Merci de ton aide :mrgreen:
Je vais mettre "résolu". Merci encore !
et c'était quoi la modif ?
Un truc tout bête. En fait dans showStartingPage je faisais appel ensuite à showPage. Sauf que dans showPage toute la méthode était du au fait que la page n'est pas la même que la page courante (vu que je l'utilise pour next et back). Ors pour le début c'est forcemment le cas.
tu avais initialisé currentPage à wizard.getStartingPage() avant d'appeler showPage ? effectivement, le code dans le test n'était pas appelé alors
Oui en effet j'avais initialisé currentPage à wizard.getStartingPage() avant d'appeller showPage(). :?