3

我试图让 Weld 在我的 JavaFX 2 (SE) 应用程序中工作(或者我应该在 Weld 中说 JavaFX?)。我有响应用户交互的控制器。现在我想将我的服务(例如数据库服务)注入到这些控制器中。

使用 Weld 这应该很简单:

@Inject
private MyService service;

现在为了初始化 Weld,有三个选项。
选项1)

public void main(@Observes ContainerInitialized event) {
    launch(); // start JavaFX
}

选项 2)

public static void main(final String[] args) {
    new StartMain(args).go();
    launch(args);
}

选项 3)

public static void main(final String[] args) {
    final WeldContainer weld = new Weld().initialize();
    service = weld.instance().select(MyService.class).get();
    launch(args);
}

选项 1 和 2 在我的控制器中导致 NullPointerExceptions,因为在带注释的注入点处没有注入任何内容。只有选项 3 有效,但这并不是我真正需要的,因为我不希望该服务出现在我的主应用程序类中,而是在我的 JavaFX 控制器中。使用选项 3,我必须以某种方式将初始化的服务传递给我的控制器类,在这种情况下,我不需要 Weld。那么如何将服务 bean 注入 JavaFX 控制器呢?不幸的是,我没有找到关于我的问题的文档。

也许有人已经积累了使用 Weld 和 JavaFX 的经验,可以帮助我。

更新

我在Weld 讨论论坛上写下了我的一些努力,但不幸的是我没有得到答复。在我看来 Weld 不适用于 JavaFX。我想我必须使用好的旧设置器将我的服务插入到我的控制器中(请参阅论坛以获取解决方案)。

更新 2

我发现了一篇关于 Weld 和 JavaFX 2的博客。我还没有尝试过这个解决方案,但我认为它对其他程序员很有用。

4

0 回答 0