java - 表视图中带有额外元素的 ObservableList
问题描述
我面临一个问题ObservableList
。我正在做的是,添加一个元素ObservableList
然后将其设置为TableView
但问题是每当我添加一个元素以ObservableList
使用addAll()
一些额外的元素时显示在TableView
.
这是我的代码片段
public void startRun(final TestCase test) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
if (sessionConfig.isEnableSessionControl() || detailscol.isVisible() == false)
saveReportBtn.setDisable(true);
else
saveReportBtn.setDisable(true);
testCaseList.add(test);
start = "Running";
removerow++;
startRunDataList = FXCollections.observableArrayList(new TestExecutionTable(test.getName(), start));
updatedDataStartrun.addAll(startRunDataList);
testExecutioTable.setItems(updatedDataStartrun);
lastOne = startRunDataList.get(0);
}
});
t.start();
}
testCaseList = new ArrayList<TestCase>();
startRunDataList = FXCollections.observableArrayList();
updatedDataStartrun= FXCollections.observableArrayList();
在开始上课时在哪里初始化。
以上方法startRun(final TestCase test)
在循环中被调用。
for (TestCase test : tests) {
CountDownLatch latch = new CountDownLatch(1);
listener.startSuite(null);
listener.startRun(test);
try {
test.run(context, listener);
listener.passed(test, latch);
} catch (TestFailure failure) {
listener.failed(test, failure, latch);
//latch.wait();
} catch (Throwable t) {
listener.error(test, t, latch);
//latch.wait();
} finally {
listener.endRun(test);
}
}
但是,上面的代码在 Java 7 上运行良好,但在更高版本(Java 8 及更高版本)上却不行。
解决方案
您正在运行可并行化的代码(在不同线程中工作的代码),没有任何同步。因此,各种线程可以以完全任意的方式相互交织。Java 7 可能使用了不同的调度机制,导致您的代码意外地正常工作。
如果您曾经遇到不同线程可能并行访问集合的情况,您可能希望将代码片段包装在synchronized
块中,以确保给定的代码片段以原子方式执行,而不受其他线程的任何干扰。
推荐阅读
- swift - Swift 4 Firebase 在 TableView 上显示用户组
- gpu - Google 计算引擎无法选择 1 NVIDIA Tesla K80
- python - 如何在python中拆分写在excel表格中的句子?
- sql - 为列的最小值/最大值拉取唯一的行组合
- django - Django对父级的复杂查询
- ignite - 打开文件太多但 ulimit 为“打开文件 (-n) 1048576”时引发异常不起作用
- asp.net - “新建”按钮依赖于 Id
- c# - 如何设置一个具有两个外键的实体?
- python - 在 Matplotlib 上为大量数据设置动画的正确方法?
- css - Bootstrap 4:列之间没有空格