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
如何在 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