JavaFX 调用 SceneBuilder 中的默认方法 (FXML)

JavaFX call default method in SceneBuilder (FXML)

如何在 FXML - scenebuilder 中调用接口默认方法。

我的界面如下:

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

和控制器,例如:

BlaController implements Startable {...}

但是如果我在 fxml 中调用方法 "handleStart()",我会得到以下异常:

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

是否可以调用该方法?

不可能实现接口默认方法并在 FXML 中使用它,显然 FXMLLoader 使用反射并且在 class 实现中找不到该方法。您必须覆盖控制器中的方法class,然后调用默认方法。

界面保持不变。

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

这是调用超级实现的方式

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

希望对您有所帮助...

我创建了一个功能请求。也许将来会有一个直接解决这个问题的方法:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8259916