2013-08-27 53 views
3

我有一個已註冊Controller的fxml文件。 Controller實現EventHandler以及方法句柄(ActionEvent e)。如果發生註冊事件,則會處理處理程序方法中的代碼,但並非總是如此。但是這個下面的異常跟蹤被打印。我錯過了什麼嗎?IllegalArgumentException事件發生時,javafx

Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: argument type mismatch 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:491) 
    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:491) 
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) 
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1502) 
    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:54) 
    at javafx.event.Event.fireEvent(Event.java:203) 
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3544) 
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3375) 
    at javafx.scene.Scene$MouseHandler.access$1900(Scene.java:3326) 
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1617) 
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2394) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:312) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:237) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:354) 
    at com.sun.glass.ui.View.handleMouseEvent(View.java:514) 
    at com.sun.glass.ui.View.notifyMouse(View.java:877) 
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) 
    at com.sun.glass.ui.gtk.GtkApplication.access$200(GtkApplication.java:47) 
    at com.sun.glass.ui.gtk.GtkApplication$5$1.run(GtkApplication.java:137) 
    at java.lang.Thread.run(Thread.java:724) 

回答

3

好吧,我自己解決了這個問題:

我註冊了處理函數不僅爲「的OnAction」也爲「onMouseReleased」事件字段。爲此,我使用了SceneBuilder。 但是,爲什麼我實際上只能使用「onMouseReleased」onAction?

+1

onAction等待EventHandler 並且onMouseReleased等待不同的類型:EventHandler <?超級MouseEvent>。這就是爲什麼你會得到「參數類型不匹配」異常。我想SceneBuilder使用原始類型或反射來生成代碼,這就是爲什麼錯誤只能在運行時找到,而不能在編譯時發現。 – Petr