IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

Problème controleur JavaFX MVC


Sujet :

JavaFX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2012
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 60
    Par défaut Problème controleur JavaFX MVC
    Bonjour à tous,

    je suis débute en JavaFX, mon programme de test à pour but de mettre en place le modèle MVC et je rencontre un problème avec les controleurs.
    Quand je clique sur le bouton (CenterControler) j'ai bien un message qui s'affiche sur mon label mais quand je clique sur File->Quit (MainControler) j'ai ce message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    	at javafx.fxml.FXMLLoader$MethodHandler.invoke(Unknown Source)
    	at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(Unknown Source)
    	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source)
    	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
    	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
    	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    	at com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source)
    	at com.sun.javafx.event.EventUtil.fireEvent(Unknown Source)
    	at javafx.event.Event.fireEvent(Unknown Source)
    	at javafx.scene.control.MenuItem.fire(Unknown Source)
    	at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.doSelect(Unknown Source)
    	at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.lambda$createChildren$324(Unknown Source)
    	at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer$$Lambda$150/11109972.handle(Unknown Source)
    	at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(Unknown Source)
    	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source)
    	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
    	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
    	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source)
    	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    	at com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source)
    	at com.sun.javafx.event.EventUtil.fireEvent(Unknown Source)
    	at javafx.event.Event.fireEvent(Unknown Source)
    	at javafx.scene.Scene$MouseHandler.process(Unknown Source)
    	at javafx.scene.Scene$MouseHandler.access$1500(Unknown Source)
    	at javafx.scene.Scene.impl_processMouseEvent(Unknown Source)
    	at javafx.scene.Scene$ScenePeerListener.mouseEvent(Unknown Source)
    	at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source)
    	at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(Unknown Source)
    	at com.sun.glass.ui.View.handleMouseEvent(Unknown Source)
    	at com.sun.glass.ui.View.notifyMouse(Unknown Source)
    	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    	at com.sun.glass.ui.win.WinApplication.lambda$null$141(Unknown Source)
    	at com.sun.glass.ui.win.WinApplication$$Lambda$37/1109371569.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.reflect.InvocationTargetException
    	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 sun.reflect.misc.Trampoline.invoke(Unknown Source)
    	at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
    	... 44 more
    Caused by: java.lang.NullPointerException
    	at controler.CenterControler.show(CenterControler.java:42)
    	at controler.MainControler.onClick2(MainControler.java:45)
    	... 53 more

    Voici le code du Main.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 application;
     
    import java.io.IOException;
     
    import controler.CenterControler;
    import controler.MainControler;
    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.stage.Stage;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
     
     
     
    public class Main extends Application {
     
    	CenterControler ctrl_Center;
    	MainControler ctrl_Main;
     
    	Stage primaryStage;
     
    	@Override
    	public void start(Stage primaryStage) throws IOException {
     
    			FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("../view/themain.fxml"));
     
    			Parent root = (Parent) fxmlLoader.load();
    			ctrl_Main = (MainControler)fxmlLoader.getController();
     
    	        Scene scene = new Scene(root, 800, 600);
     
    	        primaryStage.setTitle("FXML Welcome");
    	        primaryStage.setScene(scene);
    	        primaryStage.show();
    	}
     
    	public static void main(String[] args) {
    		launch(args);
    	}
    }
    Voici le code de mon MainControler.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    package controler;
     
    import java.net.URL;
    import java.util.ResourceBundle;
     
    import javafx.fxml.FXML;
    import javafx.fxml.Initializable;
    import javafx.scene.control.Menu;
    import javafx.scene.control.MenuBar;
    import javafx.scene.control.MenuItem;
     
    public class MainControler implements Initializable{
     
    	@FXML
    	private Menu File;
     
    	@FXML
    	private MenuBar barreMenu;
     
    	@FXML
    	private Menu sousMenu;
     
    	@FXML
    	private MenuItem menuQuit;
     
    	@FXML
    	private CenterControler centreControle;
     
     
    	@Override
    	public void initialize(URL location, ResourceBundle resources) {
    		assert File != null : "fx:id=\"File\" was not injected: check your FXML file 'themain.fxml'.";
    		assert menuQuit != null : "fx:id=\"menuQuit\" was not injected: check your FXML file 'themain.fxml'.";
    	}
     
    	public void setCenterControle(CenterControler cc)
    	{
    		this.centreControle = cc;
    	}
     
    	@FXML
    	protected void onClick2()
    	{
    		centreControle = new CenterControler();
    		centreControle.show("IT WORKS !!! FROM MAIN CONTROLER");
    	}
    }
    Voici le fichier CenterControler.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    package controler;
     
    import java.net.URL;
    import java.util.ResourceBundle;
     
    import javafx.fxml.FXML;
    import javafx.fxml.Initializable;
    import javafx.scene.control.Button;
    import javafx.scene.control.Label;
     
    public class CenterControler implements Initializable{
     
    	@FXML
    	private Button btn_1;
     
    	@FXML
    	private Label labelMSG;
     
    	@Override
    	public void initialize(URL arg0, ResourceBundle arg1) {
    		assert btn_1 != null : "fx:id=\"btn_1\" was not injected: check your FXML file 'part2.fxml'.";
    		assert labelMSG != null : "fx:id=\"labelMSG\" was not injected: check your FXML file 'part2.fxml'.";
    	}
     
    	public void setBTN(Button btn){ this.btn_1 = btn;}
     
    	public void setLabel(Label lb) {this.labelMSG = lb; }
     
    	public Button getBTN(){ return this.btn_1; }
     
    	public Label getLabel(){ return this.labelMSG;}
     
    	@FXML
    	protected void onClickShowMSG()
    	{
    		labelMSG.setText("PUSH FROM CENTER CONTROLER");
    	}
     
    	public void show(String msg)
    	{
    		labelMSG.setText(msg);
    	}
    }
    Le fichier themain.fxml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?xml version="1.0" encoding="UTF-8"?>
     
    <?import java.lang.*?>
    <?import java.util.*?>
    <?import javafx.scene.control.*?>
    <?import javafx.scene.layout.*?>
    <?import javafx.scene.paint.*?>
    <?import javafx.scene.text.*?>
     
    <VBox prefHeight="400.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controler.MainControler">
      <children>
        <MenuBar fx:id="barreMenu" VBox.vgrow="NEVER">
          <menus>
            <Menu fx:id="sousMenu" mnemonicParsing="false" text="File">
              <items>
                <MenuItem fx:id="menuQuit" mnemonicParsing="false" onAction="#onClick2" text="Quit" />
              </items>
            </Menu>
          </menus>
        </MenuBar>
        	<fx:include fx:id="p2" source="part2.fxml" />
     
      </children>
    </VBox>
    Et le fichier part2.fxml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="UTF-8"?>
     
    <?import javafx.scene.control.*?>
    <?import java.lang.*?>
    <?import javafx.scene.layout.*?>
    <?import javafx.scene.layout.AnchorPane?>
     
     
    <AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controler.CenterControler">
       <children>
          <Button fx:id="btn_1" layoutX="274.0" layoutY="188.0" mnemonicParsing="false" onAction="#onClickShowMSG" text="Button" />
          <Label fx:id="labelMSG" layoutX="286.0" layoutY="128.0" text="Label" />
       </children>
    </AnchorPane>
    Merci d'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Code Console : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Caused by: java.lang.NullPointerException
    	at controler.CenterControler.show(CenterControler.java:42)

    Vérifie que ton instruction ne manipule pas un objet null, par exemple si tu as déclaré un id au lieu de un fx:id dans le FXML ou si tu as fait une faute de frappe dans le nom de la variable ou si tu as oublié @FXML dans le contrôleur.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2012
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 60
    Par défaut
    Tout d'abords merci pour ta réponse, j'ai vérifié pour ce que tu m'as dit et ça fonctionne désormais

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Problème de nommage / orthographe comme prévu.

    Dans themain.fxml tu as :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <fx:include fx:id="p2" source="part2.fxml" />

    Mais dans MainControler tu as :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @FXML
    private CenterControler centreControle;
    Donc, cette valeur est toujours null puisque le nom n'est pas correct.

    Pour que l’injection se fasse de manière correcte tu devrais en fait avoir à la place :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @FXML
    private CenterControler p2Controller;
    Tu dois ensuite modifier la méthode onClick2() pour qu'elle devienne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @FXML
    protected void onClick2() {
        p2Controller.show("IT WORKS !!! FROM MAIN CONTROLER");
    }
    De plus, tu devrais enlever la méthode setCenterControle(), elle ne sert à rien puisque l'injection du contrôleur secondaire est implicite lors du chargement du 1er FXML.

    PS : et controller ça prend 2 l en anglais.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème rafraichissement form - MVC
    Par Clezio dans le forum Flex
    Réponses: 6
    Dernier message: 13/07/2010, 01h12
  2. Réponses: 0
    Dernier message: 26/06/2010, 19h21
  3. [ZF 1.10] Problème de configuration (MVC modulaire)
    Par magmus dans le forum MVC
    Réponses: 0
    Dernier message: 20/05/2010, 22h22
  4. [ZF 1.8] ajaxLink() / ajaxContext problème rafraîchissement zone MVC
    Par leken11 dans le forum MVC
    Réponses: 3
    Dernier message: 17/07/2009, 16h40
  5. [W2000S] Problème controleur domaine
    Par marechal dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 06/03/2008, 00h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo