之前做的小工具出现了点问题,时不时报出数组越界的错误,但是定位不到具体的代码。
今天花点时间解决一下。
想要实现的效果大概是这样的:多个线程轮流在TextArea上显示消息,为了保证数据实时更新,需要不断的刷新TextArea组件。
原代码是这样的
public void refresh() {
if(currentServerName == null) {
//拒绝刷新
return;
}
setText("");
appendText(LOG_MAP.getOrDefault(currentServerName, ""));
setScrollTop(Double.MAX_VALUE);
}
直接在外部线程(自己创建的线程)去刷新TextArea中的数据。
后查阅资料发现必须在JavaFX自己的线程里修改容器内容才能保证不会报错。所以用Platform包裹一下,修改后的代码如下:
public void refresh() {
if(currentServerName == null) {
//拒绝刷新
return;
}
setText("");
appendText(LOG_MAP.getOrDefault(currentServerName, ""));
setScrollTop(Double.MAX_VALUE);
Platform.runLater(()->{
setText("");
appendText(LOG_MAP.getOrDefault(currentServerName, ""));
setScrollTop(Double.MAX_VALUE);
});
}