Любой вызов MobileApplication.getInstance()::switchView
должен происходить в потоке приложения JavaFX, так как он в основном включает изменения в графе сцены.
Грубо говоря, вы удаляете старый вид (который является Node
) и добавляете новый (другой Node
):
glassPane.getChildren().remove(oldNode);
glassPane.getChildren().add(newNode);
И, как вы знаете, что-нибудьсвязанные с манипулированием узлами должны выполняться в потоке приложения JavaFX.
Кажется, что событие входа в систему запускается в фоновом потоке, поэтому все, что вам нужно сделать, это поставить переключатель представления в очередь в потоке приложения, используяPlatform.runLater
:
@Override
public void loginResponseReceived(LoginResponse loginResponse) {
Map<String, String> source = (Map<String, String>) loginResponse.getSource();
boolean status = source.get("status").equals("true");
if (status) {
// switch view has to be done in the JavaFX Application thread:
Platform.runLater(() ->
MobileApplication.getInstance().switchView(SECONDARY_VIEW));
}
}