我想創建一個使用JavaFX和Swing for TrayIcon的應用程序。JavaFX + afterburnerfx + 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
,我已經嘗試過使用該註釋,但沒有,但沒有區別....甚至爲空。