之前做的小工具出现了点问题,时不时报出数组越界的错误,但是定位不到具体的代码。
今天花点时间解决一下。
想要实现的效果大概是这样的:多个线程轮流在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);});}