Vaadin: не может принудительно обновить progressBar из потока - PullRequest
0 голосов
/ 23 января 2019

Не могу принудительно обновить progressBar для обновления из потока (FeederThread).

Кнопка должна быть нажата, затем начинается поток, должен появиться индикатор выполнения.

Я использую Vaadin Flow и SpringBoot

Мой пользовательский интерфейс с progressBar и кнопкой (startBtn):

@SpringComponent
@UIScope
@Push
@Route("push")
public class UploadEditor extends VerticalLayout {
private FeederThread feederThread;
private  ProgressBar bar;

private void progresBarChanche(boolean value) {
    bar.setVisible(value);
    bar.setIndeterminate(value);
}

@Override
protected void onAttach(AttachEvent attachEvent) {

}

public UploadEditor() {
    setup();
}

private void setup() {
    VerticalLayout progresLayout = new VerticalLayout();

    bar = new ProgressBar();
    progresLayout.add(bar);
    bar.setVisible(false);

    HorizontalLayout layoutBtn = new HorizontalLayout();

    Button startBtn = new Button(" Start Thread", VaadinIcon.DATABASE.create());
    startBtn.setSizeFull();

    layoutBtn.add(startBtn);
    layoutBtn.setSizeFull();

    startBtn.addClickListener((event) -> {
       feederThread = new FeederThread(getUI().get(), this);
        feederThread.start();
    });

    add(progresLayout, layoutBtn);
    setAlignItems(FlexComponent.Alignment.CENTER);
}

}

И поток:

    private  class FeederThread extends Thread {
    private final UI ui;
    private final UploadEditor view;

    public FeederThread(UI ui, UploadEditor view) {
        this.ui = ui;
        this.view = view;
    }

    @Override
    public void run() {
        int count = 0;
        try {

           ui.access(() -> {view.progresBarChanche(true); ui.push();});

            while (count < 10) {
                // Sleep to emulate background work
                Thread.sleep(500);
           count++

            }

            // Inform that we are done
             ui.access(() -> {
                 view.progresBarChanche(false);
            });
        }catch (InterruptedException e){
            e.printStackTrace();
        }

    }
}

Что не так?PS Я использую Vaadin Flow и SpringBoot

...