2017-08-11 78 views
1

如何在FXML - scenebuilder中调用接口默认方法。SceneBuilder中的JavaFX调用默认方法(FXML)

我有这样一个接口:

public interface Startable 
{ 
    default void handleStart(){...} 
} 

,并像一个控制器:

BlaController implements Startable {...} 

但如果我调用该方法 “handleStart()” 中的FXML,我得到下面的异常:

javafx.fxml.LoadException: Error resolving onMouseClicked='#handleStart', either the event handler is not in the Namespace or there is an error in the script. 

是否有可能调用该方法?

+0

你的控制器可以实现'''javafx.fxml.Initializable''',并实现预期的结果,为什么你需要一个自定义接口? –

+0

无论如何,控制器正在实现Initializable以便能够使用资源包,但是我看不出这应该如何帮助我? – Punika

回答

1

无法实现接口默认方法并在FXML中使用它,显然FXMLLoader使用了反射并且在类实现中找不到方法。您必须重写Controller类中的方法,然后调用默认方法。

界面保持不变。

public interface Startable { 
    default void handleStart(){...} 
} 

这是你如何调用超级实施

public class BlaController implements Startable { 
    @Override 
    @FXML 
    void handleStart(){ 
     Startable.super.handleStart(); 
    } 
} 

希望它可以帮助...

+0

好吧,这似乎是fxml加载器的某种弱点。 但你的方式正常工作......感谢兄弟 – Punika