gpt4 book ai didi

java - TableView 中带有额外元素的 ObservableList

转载 作者:行者123 更新时间:2023-12-02 05:16:01 24 4
gpt4 key购买 nike

我遇到了 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();
在类(class)开始时初始化。

以上方法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 block 中,以确保给定的代码片段以原子方式执行,而无需任何操作。来自其他线程的干扰。

关于java - TableView 中带有额外元素的 ObservableList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56293035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com