JavaFX + afterburnerfx + trayicon - 阶段后注入丢失 close/hide
JavaFX + afterburnerfx + trayicon - Lost injection after stage close/hide
我正在尝试使用 JavaFX 和 Swing 为 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
被注入。下次我再次展示舞台时(因为托盘上的应用程序是 hidden/closed 到 运行),User
为空。
用户应该是 @Singleton
,我尝试过使用和不使用该注释,但没有区别....甚至为空。
我认为已经解决了这个问题:
我在演示者中使用的是 com.google.inject.Inject
,而不是 javax.inject.Inject
我正在尝试使用 JavaFX 和 Swing 为 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
被注入。下次我再次展示舞台时(因为托盘上的应用程序是 hidden/closed 到 运行),User
为空。
用户应该是 @Singleton
,我尝试过使用和不使用该注释,但没有区别....甚至为空。
我认为已经解决了这个问题:
我在演示者中使用的是 com.google.inject.Inject
,而不是 javax.inject.Inject