Я хочу перейти к представлению, которое отображает большие данные в сетке после нажатия кнопки.Я знаю, что происходит отложенная загрузка, но я хочу загрузить все данные, чтобы иметь возможность сортировки, нажав на заголовок.С ленивой загрузкой я мог отсортировать только один столбец.
Button viewDataBtn = new Button("View scan data");
viewDataBtn .addClickListener(e -> {
UI.getCurrent().getNavigator().navigateTo("scandataview/" + name);
});
Это работает, но есть длинный перерыв, пока новый вид не виден.Поэтому я хочу показать окно с индикатором выполнения, пока не загрузится новое представление, и загрузить новое представление в другом потоке.Я безуспешно пробовал следующее:
viewDataBtn .addClickListener(e -> {
UI.getCurrent().addWindow(showProgress);
new Thread(new Loader()).start();
});
В том же классе:
class Loader implements Runnable {
@Override
public void run() {
try {
//Nullpointer exception here:
UI.getCurrent().getNavigator().navigateTo("scandataview/" + name);
} catch (Exception e) {
e.printStackTrace();
}
finally {
UI.getCurrent().removeWindow(showProgress);
}
}
}
И окно индикатора выполнения:
public class LoadingIndicatorWindow extends Window {
public LoadingIndicatorWindow() {
center();
setVisible(true);
setResizable(false);
setDraggable(false);
setModal(true);
setClosable(false);
setCaption("Loading");
VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
layout.setWidth("100%");
Label progressLabel = new Label("Please wait! Data loading in progress...");
progressLabel.setSizeFull();
ProgressBar progressBar = new ProgressBar();
progressBar.setSizeFull();
progressBar.setIndeterminate(true);
progressBar.setVisible(true);
layout.addComponent(progressLabel);
layout.addComponent(progressBar);
layout.setComponentAlignment(progressLabel, Alignment.MIDDLE_CENTER);
layout.setComponentAlignment(progressBar, Alignment.MIDDLE_CENTER);
setContent(layout);
}
}
Кажется, я не могу перейти в другой поток.
Есть ли способ показать окно индикатора выполнения перед переходом к другому представлению, когда это представление готово, показывая большую сетку с данными ???
Большое спасибо за вашу помощь!