gpt4 book ai didi

java - 如何在 JavaFX Controller 中实现接口(interface)?

转载 作者:行者123 更新时间:2023-12-01 20:16:33 24 4
gpt4 key购买 nike

我有一个用于将系统消息发布到 GUI 的接口(interface),但我这样做的方式会导致尝试使用该接口(interface)方法的类(而不是实现它的类)出现空指针异常

public interface SystemMessage {
void postMessage(String outText);
}

在我的 Controller 中,我实现了这个接口(interface)并使用它向 GUI 发送消息

public class MainController implements SystemMessage {
@FXML
public DialogPane systemMessage;

@Override
public void postMessage(String outText) {
systemMessage.setContentText(outText);
}
}

从 Main.java 中,我调用一些辅助类来完成一些后台工作(我还没有进行线程处理,所以请原谅一切都在主线程上)

@Override
public void start(Stage primaryStage) throws Exception{
FXMLLoader loader = new FXMLLoader(getClass().getResource("fxml/entry.fxml"));
Parent root = loader.load();
this.mainController = loader.getController();
primaryStage.setTitle("Title");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
initializeSync();
}

private void initializeSync() {
//Each of these perform several function on initialization
Identity identity = new Identity();
String[] args = null;
Api api = new Api();
api.Get(args);
SqLite db = new SqLite();
}

因此,在初始化时的身份类中,我尝试使用该接口(interface)来发布消息,但出现空指针异常。

public class Identity {
private String machineId = null;
public String statusText = null;

SystemMessage systemMessage;// Trying to instantiate the system message interface??

public Identity(){
systemMessage.postMessage("Checking Machine Identity");
//..//
}
//..//
}

最佳答案

我不确定您的担忧是否特定于 JavaFX。

创建 Identity 对象时,需要设置对 SystemMessage 的依赖。
替换:

Identity identity = new Identity();

作者:

...
MainController mainController = ... // retrieve it with fxmlLoader if required
Identity identity = new Identity(mainController);

并更改 Identity 构造函数,使其采用 SystemMessage 参数:

public Identity(SystemMessage systemMessage){
this.systemMessage = systemMessage;
systemMessage.postMessage("Checking Machine Identity");
}

关于java - 如何在 JavaFX Controller 中实现接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45696367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com