【问题标题】:JavaFX + afterburnerfx + trayicon - Lost injection after stage close/hideJavaFX + afterburner fx + 托盘图标 - 阶段关闭/隐藏后丢失注入
【发布时间】:2015-06-11 04:43:42
【问题描述】:

我正在尝试使用 JavaFX 和 Swing for TrayIcon 创建一个应用程序。

在加载时,我检查用户是否已经存在:

NewuserView view = new NewuserView();
NewuserPresenter presenter = (NewuserPresenter)view.getPresenter();

User user = presenter.getUser();

    if(user.getUsername() == null) {
        Scene scene = new Scene(view.getView());
        stage.setScene(scene);
        stage.show();
    } else {
        TrayIconManager.minimizeToTray();
    }

NewuserPresenter 有一个带有默认构造函数的@Inject User user,一切正常(我已经在其中放置了一个日志,将被调用)。

如果用户已经存在,minimizeToTray() 会:

javax.swing.SwingUtilities.invokeLater(TrayIconManager::doAppToTray);
private static void doApptoTray() {
   ....
   stage.close(); // or stage.hide(), no difference
}

现在应用程序已最小化,当我对其调用操作(例如,创建事件)时,演示者有一个 @Inject User user(完全像 NewuserView)。

public NewEventPresenter implements Initializable {
@Inject
    private User user;

 @Override
    public void initialize(URL url, ResourceBundle rb) {
     //user is null there
   }
}

此演示者的加载方式与之前完全相同:

private static void showNewEventRegistration() {
    NeweventView newEventView = new NeweventView();
    Scene scene = new Scene(newEventView.getView());
    TrayIconManager.stage.setScene(scene);

    TrayIconManager.stage.show();
}

showNewEventRegistration 加载了 Platform.runLater,因为必须在 FX 应用程序线程上运行。

但此时用户为空。

我第一次展示舞台时,User 被注入。下次我再次显示舞台时(因为隐藏/关闭以在托盘上运行应用程序)User 为空。

用户应该是@Singleton,我尝试过使用该注释并没有,但没有区别....甚至为null。

【问题讨论】:

    标签: java swing javafx-8


    【解决方案1】:

    我认为已经解决了这个问题:

    我在演示者中使用com.google.inject.Inject,而不是javax.inject.Inject

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-03
      • 2014-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      相关资源
      最近更新 更多