2015-04-06 92 views
-1

我想創建一個使用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,我已經嘗試過使用該註釋,但沒有,但沒有區別....甚至爲空。

回答

0

我認爲已經解決了這個:

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