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

标签 java javafx 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(); 在类(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/

相关文章:

java - 在javafx中移动形状?

java - 无法使用提取器实例化 ObservableList

java - 如何在 Java 中与智能卡交互?

java - 如何连接 OSGI 包(通过包发送实体)?

java - Akka Actor 阻止消息

javafx - 在 fxml 中绑定(bind)两个以上的属性

java - OWL-API 5.1.6 SWRL 规则生成和 RDFXMLDocumentFormat : rules are merged

用于 ListView 的 JavaFX 平滑滚动

java - 如何通过操作 ObservableList 来引发置换事件?

JavaFX 从锚定 Pane 中清除所有节点并在运行时添加新节点