开始之前:我是JavaFX的新手,通过这个项目,我想学习如何正确使用该库。
情况如下:我有一个服务器-客户端应用程序。服务器向客户端发送服务器上活动用户的列表。现在,我想在用户界面中列出活动用户。我想用FlowPane中的按钮来做到这一点。问题是我的客户端在外部线程中,而不在应用程序线程中。但是由于客户端可以获取用户列表,因此我尝试直接从客户端线程更新按钮列表。
if(data.getObject() instanceof ArrayList<?>) {
ArrayList<User> activeUsers = (ArrayList<User>) data.getObject();
controller.setActiveUsers(activeUsers);
}
控制器中的方法执行以下操作:
public void setActiveUsers(ArrayList<User> activeUsers) {
for(User user:activeUsers) {
fpOnlineUsers.getChildren().add(new Button(user.getName()));
}
}
我得到的异常如下:java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-3
我有两个问题:
请道歉任何语言错误,我不是母语人士:)
答案 0 :(得分:0)
Application.runlater(Runnable)
函数。 您的代码应如下所示:
public void setActiveUsers(ArrayList<User> activeUsers) {
Platform.runLater(new Runnable() {
@Override public void run() {
for(User user:activeUsers) {
fpOnlineUsers.getChildren().add(new Button(user.getName()));
}
}
}
});