2016-11-30 6 views
0

JavaFXシーンビルダを使用してUIルックを作成しました。コントローラを使用することができ、ボタンをクリックするとコンソールに印刷されます。JavaのFXMLコントローラを使用して他のメソッドを呼び出しますか?

私の問題は、Javaプログラムから他の関数​​を呼び出す方法です。 コントローラに新しいオブジェクトを作成して他のメソッドを呼び出すと、エラーが発生します。ここで

は私がと対話するクラスです:

public class GOcommand extends Command { 

    public GOcommand(String firstWord, String secondWord, String thirdWord) { 
     super(firstWord, secondWord, thirdWord); 
    } 

    public GOcommand() {} 

    @Override 
    public boolean execute(Player player) { 
     if (!hasSecondWord()) { 
      // if there is no second word, we don't know where to go... 
      Game.out.println(Game.messages.getString("goWhere")); 
      return false; 
     } 

     String direction = getSecondWord(); 
     player.goRoom(direction); 
     return false; 
    } 
    } 

Here is the controller class: 

    public class FXMLDocumentController implements Initializable { 

    Player player; 

    @FXML 
    private TextArea textArea; 

    @FXML 
    private Button northBtn; 

    @FXML 
    private Button giveBtn; 

    @FXML 
    private Button CloseBtn; 

    @FXML 
    private Button eastBtn; 

    @FXML 
    private Button dropBtn; 

    @FXML 
    private Button southBtn; 

    @FXML 
    private Button WestBtn; 

    @FXML 
    private Button helpBtn; 

    @FXML 
    private Button takeBtn; 

    @FXML 
    private void exitGame() { 
     System.exit(1); 
    } 

    @FXML 
    void northClicked(ActionEvent event) { 
     textArea.appendText("Go North button Clicked\n"); 
     player.goRoom("NORTH"); 
    } 

    @FXML 
    private void eastClicked(ActionEvent event) { 
     textArea.appendText("Go East button Clicked\n"); 
    } 

    @FXML 
    private void southClicked(ActionEvent event) { 
     textArea.appendText("Go South button Clicked\n"); 
    } 

    @FXML 
    private void westClicked(ActionEvent event) { 
     textArea.appendText("Go West button Clicked\n"); 
    } 

    @FXML 
    private void dropClicked(ActionEvent event) { 

    } 

    @FXML 
    private void takeClicked(ActionEvent event) { 
     textArea.appendText("Take button Clicked\n"); 
    } 

    @FXML 
    private void giveClicked(ActionEvent event) { 
     textArea.appendText("Give button Clicked\n"); 
    } 

    @FXML 
    private void helpClicked(ActionEvent event) { 
     textArea.appendText("Help me know!\n"); 
    } 


    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     // TODO 
    } 
    } 

そして、私はプレイヤー作成したので、これらのエラーです:あなたはそれを示し投稿スタックトレースの下部にある

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 assignment2.FXMLDocumentController.northClicked(FXMLDocumentController.java:62) 
    ... 55 more 
+3

「他のメソッド」を呼び出そうとすると、どのようなエラーが発生しますか?そして、あなたはこれらの他のメソッドを呼び出す試みを投稿することができますか?(コントローラクラスを投稿してください) – n247s

答えて

0

をNPE、あなたがアクセスしているフィールド 'player'。そして私が見ることから、その分野は初期化されていません。さもなければ、このコードは完全にうまくいくでしょう。多くの場合、nullのフィールドにアクセスすることによって引き起こされJavaFXアプリケーションに

Player player = new Player(); 

アンにInvocationTargetException:

+0

私は冒頭にそれを作成しました。 @ n247s – Pavlos

+0

のコントローラで、これはプレーヤークラスのコードの一部です。 public player(String name、Room room){ this.name = name; currentRoom = room; items = new HashMap <>(); } – Pavlos

+1

フィールドを作成しましたが、フィールドを初期化しませんでした。 (例えば、 'Player player = new Player();' – n247s

0

はあなたのようなプレーヤーの新しいインスタンスを作成する必要があります。 JavaFXアプリケーションを作成するときは、そのことを覚えておいてください!

+0

問題はプレイヤーがゲームを進行していることで、名前と部屋のパラメータがあります。どのようにこれらのパラメータも渡すのですか? – Pavlos

関連する問題