2017-02-22 1 views
0

J'essaie d'en faire une plate-forme de mise en page de poker, où vous pouvez appuyer sur un bouton et sélectionner la carte que vous voulez sur le bouton. Chaque fois que j'essaie de mettre à jour le bouton imageview, je reçois des erreurs.Essayer de changer une image de bouton sur un bouton appuyer sur une autre fenêtre en Java FX en utilisant FXML

Voici mon code Java FX

@FXML 
ImageView card1; 

public void selectHeart2(ActionEvent Event) throws IOException{ 
    System.out.println("Selecting Card"); 
    ((Node)(Event.getSource())).getScene().getWindow().hide(); 
    Image image = new Image("file:images/hearts/hearts2.png"); 
    card1.setImage(image); 
} 

Voici mon FXML

<AnchorPane minHeight="-Infinity" minWidth="-Infinity" prefHeight="761.0" prefWidth="1000.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainController"> 
    <children> 
     <HBox layoutX="198.0" layoutY="190.0" prefHeight="95.0" prefWidth="412.0"> 
     <children> 
      <Button maxHeight="120.0" maxWidth="90.0" minHeight="120.0" minWidth="90.0" mnemonicParsing="false" onAction="#selectCard1" prefHeight="120.0" prefWidth="90.0"> 
       <graphic> 
        <ImageView fx:id="card1" fitHeight="120.0" fitWidth="90.0" pickOnBounds="true" preserveRatio="true" > 

        </ImageView> 
       </graphic></Button> 

et est mon erreur ici:

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774) 
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) 
    at javafx.event.Event.fireEvent(Event.java:198) 
    at javafx.scene.Node.fireEvent(Node.java:8411) 
    at javafx.scene.control.Button.fire(Button.java:185) 
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182) 
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96) 
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89) 
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 
    at javafx.event.Event.fireEvent(Event.java:198) 
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) 
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) 
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:380) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:294) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:416) 
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:415) 
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555) 
    at com.sun.glass.ui.View.notifyMouse(View.java:937) 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) 
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) 
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769) 
    ... 45 more 
Caused by: java.lang.NullPointerException 
    at application.MainController.selectHeart2(MainController.java:384) 
    ... 55 more 

l'erreur (ligne 384) est la suivante: card1.setImage (image);

Répondre

0

éditer: mauvaise réponse a été ici. Garder temporairement pour préserver les commentaires utiles.

+0

Est-ce exact? Sûrement 'ImageView.setImage (null)' est OK (efface la vue de l'image), même si ce n'est pas ce qui est prévu. Je pense que 'card1' est nul. Pas assez d'informations dans la question pour savoir, cependant. –

+0

J'ai cette ligne dans mon action: Image image = nouvelle Image ("file: images/hearts/hearts2.png"); Est-ce que cela n'appelle pas l'image? si je change un peu l'URL et que j'essaie d'autres façons, je reçois des URL invalides. @James_D – call28c

+0

@ call28c Exactement, c'est ce que je dis. L'image se charge bien, mais 'card1' est nul. Vous n'avez fourni aucun moyen à quiconque de savoir pourquoi, et c'est pourquoi j'ai voté pour clore la question. –

-2

Essayez de créer l'objet card1 avant la ligne 384. Il corrigera l'erreur NullPointerException si je ne me trompe pas.

card1 = nouvelle ImageView();

+1

N'initialisez jamais les champs qui sont annotés '@ FXML'. –

+0

cela se débarrasse de l'exception NullPointerException, mais ne pas afficher l'image sur le bouton – call28c