Guice 空指针异常

催眠混蛋

所以我是 Guice 的新手,NullPointerException每当我尝试使用我的 Injected 对象时,我都会不断得到s 。

起初我认为这是我的程序奇怪的复杂性,但我创建了一个非常非常简单的测试程序,我仍然得到它们。程序如下:

主程序

public class Main  extends Application{
    public static void main(String[] args) {
        launch(Main.class);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        Injector injector = Guice.createInjector(new BillingModule());

        Parent p = FXMLLoader.load(getClass().getResource("addtest.fxml"));

        primaryStage.setScene(new Scene(p, 100, 100));
        primaryStage.show();
    }
}

计费模块.java

public class BillingModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(Add.class).to(AddImpl.class);
    }
}

添加接口

public interface Add {
   int add(int a, int b);
}

添加实现

public class AddImpl implements Add{
    public int add(int a, int b) {
        return a+b;
    }
}

FXML 控制器

public class AddTestController {
    @Inject private Add add;
    public void initialize(){}
    @FXML
    private void addTestButton(){
        System.out.println(add.add(1,3));
    }
}

FXML 文件

<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1" fx:controller="AddTestController">
   <children>
      <Button mnemonicParsing="false" onAction="#addTestButton" text="Button" />
   </children>
</AnchorPane>

正如你所看到的,这是一个非常简单的程序,我似乎仍然无法让它工作。

我的目标是Add无需调用即可被注入injector.getInstance(Add.class),而是查看@Inject并解决依赖项本身,而它并没有这样做。

我觉得我对它为什么不起作用缺少一个非常基本的理解,但它只是还没有显露出来。

关于我做错了什么以及如何解决它的任何想法?

PS我在这里使用字段注入作为示例,我知道它不建议使用,并且在我的实际程序中不会使用它。

费边

Guice 仅注入使用Injector.getInstance. 您需要使用此方法创建控制器。您可以通过在调用方法之前设置controllerFactoryof来做到这一点FXMLLoaderload

Injector injector = Guice.createInjector(new BillingModule());

FXMLLoader loader = new FXMLLoader(getClass().getResource("addtest.fxml"));
loader.setControllerFactory(injector::getInstance);
Parent p = loader.load();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章