JavaFX刷新TableView线程

我希望实现一个每隔几秒在QueueTabPageController中运行displayQueue方法的线程,以便在JavaFX GUI上自动更新表视图。 目前,通过按GUI中的刷新按钮手动更新,但这并不理想。 我在这里尝试了一些使用一些例子的方法,但似乎无法正常运行。 顺便说一句,我是新手。 任何帮助将不胜感激。

 public class QueueTabPageController implements Initializable { @FXML private TableView tableView; @FXML private TableColumn firstNameColumn; @FXML private TableColumn lastNameColumn; @FXML private TableColumn timeEnteredColumn; @FXML private TableColumn triageAssessmentColumn; @FXML private QueueTabPageController queueTabPageController; private ObservableList tableData; @Override public void initialize(URL arg0, ResourceBundle arg1) { assert tableView != null : "fx:id=\"tableView\" was not injected: check your FXML file 'FXMLQueueTabPage.fxml'"; firstNameColumn.setCellValueFactory(new PropertyValueFactory("firstName")); lastNameColumn.setCellValueFactory(new PropertyValueFactory("lastName")); timeEnteredColumn.setCellValueFactory(new PropertyValueFactory("time")); triageAssessmentColumn.setCellValueFactory(new PropertyValueFactory("triage")); // display the current queue to screen when opening page each time displayQueue(Queue.queue); } /** * @param event * @throws IOException */ @FXML private void btnRefreshQueueClick(ActionEvent event) throws IOException { displayQueue(Queue.queue); } /** * @param queue */ public void displayQueue(LinkedList queue) { tableData = FXCollections.observableArrayList(queue); tableView.setItems(tableData); tableView.getColumns().get(0).setVisible(false); tableView.getColumns().get(0).setVisible(true); } } 

谢谢,K

这样的事情可能是:

  Thread t = new Thread(() -> { while (true) { Thread.sleep(5000); // sleep 5 secs Platform.runLater(() -> { // Ensure data is updated on JavaFX thread displayQueue(Queue.queue); }); } }); t.setDaemon(true); t.start(); 

这将启动一个每5秒调用displayQueue(Queue.queue)的线程。 由于displayQueue(…)调用tableView.setItems(…),因此必须在JavaFX Application Thread上调用它,因此需要使用Platform.runLater()。

t.setDaemon(真); 所有其他线程完成后,将确保线程不会阻止JVM终止。 可能有更好的方法来处理线程关闭…