2017-06-06 32 views
0

我正在嘗試爲我的課程項目製作遊戲。要求是我需要爲服務器和客戶端使用Spring架構。我已經完成了所有這些工作,甚至通過RestTemplate從服務器發佈或獲取內容。通過彈出服務器發佈的數據更新TableView

我的服務器完全在Spring Boot上。 我的客戶端在JavaFX和Spring Boot上運行。

我現在的問題是,有時候我想讓服務器發送數據到客戶端。該帖子正在工作,我收到的數據,但我似乎無法更新我的屏幕上的TableView。

我知道,因爲服務器在客戶端觸發了它,所以它不能在主要的JavaFX UI線程上。所以我試圖加載FXML

gameDetails = playerView; 
    FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("pre_game.fxml")); 
    try { 
     Parent root = loader.load(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    PreGame controller = loader.getController(); 
    TableView<PlayerView> tblPlayerList = controller.tblPlayerList; 
    TableColumn<PlayerView, String> colPlayerName = controller.colPlayerName; 
    ObservableList<PlayerView> gamesObservableList = controller.gamesObservableList; 
    gamesObservableList.clear(); 
    gamesObservableList = FXCollections.observableArrayList(gameDetails); 
    tblPlayerList.setItems(gamesObservableList); 

但是屏幕上沒有任何反應。

在服務器端,我向任何客戶發佈「玩家」列表。它工作正常,我正在接收數據。所有這些都是一個問題,我無法理解如何更新TableView,因爲我無法訪問主UI線程。

+0

如果你只是硬編碼而不是從服務器加載它,你能顯示數據嗎? –

+0

我得到一個包含以下對象的列表: 'public PlayerView(String id,String name,String clientUri,String robotName,String secret){ this.id = id; this.name = name; this.clientUri = clientUri; this.robotName = robotName; this.secret = secret; }' –

回答

0

初始化我的JavaFX控制器功能,我需要添加以下行:

controller_name = this; 

,外初始化功能,如控制對象的聲明:

public static ControllerName controller_name; 

那麼當Spring服務器試圖聯繫我的UI時,我可以通過以下方式訪問我的UI元素:

controller_name.ui_element_name 

前提是我可能還必須使用Platform.RunLater更新UI,因爲它不在JavaFX線程上。

相關問題