Обновить / обновить sh метка JavaFX из базы данных MongoDB (JAVA) - PullRequest
0 голосов
/ 03 апреля 2020

Я прошу вашей помощи, потому что мне не удается обновить ярлыки javaFX данными из моей базы данных. Чтобы указать c, я попытался создать шаблон MVC с представлением, содержащим метки.

Я создал модули для извлечения всех данных из MongoDB (которые работают нормально). Чтобы обновить sh мое представление, я создал в моей модели поток, который каждые несколько секунд извлекает данные из базы данных. Все данные, которые я собираю, хранятся в SimpleDoubleProperty / SimpleIntegerProperty / SimpleStringProperty, чтобы сделать связывание.

Часть моего модельного класса:

public SimpleDoubleProperty sto = new SimpleDoubleProperty(0.);
public SimpleIntegerProperty nbA = new SimpleIntegerProperty(0);
public SimpleStringProperty signalStrengh = new SimpleStringProperty();
public void start() {
    worker = new DataBaseWorker();
    worker.start();
}

private class DataBaseWorker extends Thread {
    public void run() {
        while(!stop) {
            sto.set(MongoDataService.getStorage());
            nbA.set(MongoDataService.getNbAircraft(interval));
            double sig_strengh = MongoDataService.getSignalStrengh(interval);
            if(sig_strengh >= excellent_sig) {
                signalStrengh.set("Excellent");
            }
            else if (sig_strengh> good_sig && sig_strengh <excellent_sig) {
                signalStrengh.set("Good");
            }
            else {
                signalStrengh.set("Poor");
            }

            waitFor(ConfigService.getInstance().getDBFetchDataIntervalInMS());

        }
    }   
} 

После этого мой контроллер делает привязки (я также пытался сделать привязки на мой взгляд без успеха):

    Label data_sto = (Label)((HBox)supervisor.root.getChildren().get(2)).getChildren().get(1);
    Label nbAir_lab = (Label)((HBox)supervisor.root.getChildren().get(3)).getChildren().get(1);
    Label sig_lab = (Label)((HBox)supervisor.root.getChildren().get(4)).getChildren().get(1);
    data_sto.textProperty().bind(model.sto.asString());
    nbAir_lab.textProperty().bind(model.nbA.asString());
    sig_lab.textProperty().bind(model.signalStrengh);

Все отлично скомпилировано и нет ошибок во время выполнения. У меня есть окно со всем, что я создал. Но проблема в том, что мой ярлык обновляется не так, как я ожидаю.

Я думаю, что проблема может быть связана с созданным мной потоком, который не связывается со связующими, а потому что я новичок в Java и Javafx это может быть что угодно.

Спасибо и надеюсь, что кто-нибудь мне поможет.

...