JavaFX组件未更新

JavaFX组件未更新,java,javafx,kryonet,jfoenix,Java,Javafx,Kryonet,Jfoenix,我正在建造一个大厅,可以显示玩家的信息 这是我的大堂管理员: public class LobbyController{ @FXML public JFXTextArea chatArea; @FXML public JFXTextField chatField; public void displayChatMessage(String message){ chatArea.appendText(message); } @FXML

我正在建造一个大厅,可以显示玩家的信息

这是我的大堂管理员:

public class LobbyController{

    @FXML public JFXTextArea chatArea;
    @FXML public JFXTextField chatField;

    public void displayChatMessage(String message){
        chatArea.appendText(message);
    }

    @FXML
    public void onEnter(){
        Main.client.sendChatMessage(chatField.getText());
    }
}
我从另一个类访问此控制器,如下所示:

FXMLLoader fxmlLoader = new FXMLLoader();                
fxmlLoader.setLocation(getClass().getResource("/views/lobby.fxml"));
fxmlLoader.load();
LobbyController controller = fxmlLoader.getController();

if(!gameStarted){
    controller.displayChatMessage(((Packets.ChatMessage) o).message);
}
我的控制器正在接收消息,就像我在
displayChatMessage()
中放置了打印行一样,它正确地打印消息


我的问题是
appendText()
似乎根本没有更改文本。

您没有显示从FXML文件加载的UI。调用
controller.displayChatMessage()
时,您希望看到什么?我可以正确加载fxml文件,以便看到所有预期的内容
displayChatMessage()
应该在已加载的文本区域中附加一个新字符串。你没有领会我的意思。您的
lobb.fxml
文件定义了一个UI。该UI中有一个文本区域(可能还有其他内容)。调用
fxmloader.load()
时,FXML加载程序将创建一个新的UI,包括一个新的文本区域,并返回对UI根目录的引用。您获得的控制器是该UI的控制器。由于您没有显示该UI(甚至没有将其指定给引用),因此您正在更新一个不显示在任何地方的文本区域。如果您已经加载了FXML文件并显示了它,那么您需要该UI的控制器,而不是您不显示的控制器。很抱歉,我很笨,我该怎么做?在某个时候,您可能会加载FXML并显示它。在这一点上,您需要获得控制器,就像您在问题中发布的代码中一样。然后安排在该控制器上调用
displayChatMessage(…)