gpt4 book ai didi

java - 带有长任务进度条的模态窗口

转载 作者:搜寻专家 更新时间:2023-11-01 03:39:18 24 4
gpt4 key购买 nike

在某些情况下,我想在长时间运行的查询时向用户显示一个带有进度条的模式窗口。 (对于单个 UI 项目,我使用方法 setEnabled (true/false) 但我想要更优雅的解决方案。)

比如在入口点,直到所有元素都没有初始化——

public void onModuleLoad() {
// initialization of the interface here
}

还有,比如完成依赖列表框时(一对多的关系)

@UiHandler("listBox")
public void onListBoxChange(ChangeEvent event) {
someService.findDependencies(id, new AsyncCallback<List<DependencyDTO>>() {
public void onFailure(Throwable caught) {
// exception handling here
}
public void onSuccess(List<DependencyDTO> data) {
// listBox filling here
}
});
}

Vaadin应用程序我可以向监听器添加以下代码,例如 -

...
Thread thread = new Thread() {
@Override
public void run() {
// some initialization here
window.removeWindow(blockerWindow);
}
};

thread.start();
blockerWindow = new BlockerWindow();
window.addWindow(blockerWindow);
...

在我的例子中,我可以使用下面的方法来显示一个带有进度条的窗口——

private void freezeInterface() {
blockerWindow = new BlockerWindow()
blockerWindow.setGlassEnabled(true);
blockerWindow.setAnimationEnabled(true);
blockerWindow.setModal(true);
blockerWindow.center();
blockerWindow.show();
}

以及隐藏窗口的方法-

private void unfreezeInterface() {
blockerWindow.hide();
}

问题是,什么时候隐藏窗口。

例如,在入口点有一系列的查询-

...
service1.findDependenciesForListBox1(id1, new AsyncCallback<List<Dependency1DTO>>() {
public void onFailure(Throwable caught) {
// exception handling here
}
public void onSuccess(List<Dependency1DTO> data) {
// listBox1 filling here
}
});

service2.findDependenciesForListBox2(id2, new AsyncCallback<List<Dependency2DTO>>() {
public void onFailure(Throwable caught) {
// exception handling here
}
public void onSuccess(List<Dependency2DTO> data) {
// listBox2 filling here
}
});

serviceN.findDependenciesForListBoxN(idN, new AsyncCallback<List<DependencyNDTO>>() {
public void onFailure(Throwable caught) {
// exception handling here
}
public void onSuccess(List<DependencyNDTO> data) {
// listBoxN filling here
}
});

等等。

答案以以前未知的顺序出现,并在方法之一中隐藏窗口 onSuccess 我不能。

我可以使用计时器,但我事先不知道要在schedule中传递的时间。

...
blockerWindow.show();
private void unfreezeInterface() {
timer = new Timer() {
public void run() {
blockerWindow.hide();
}
};
timer.schedule(15000);
}
...

如何在 GWT 中正确实现它?

最佳答案

如果您知道要获得的响应数量,您可以使用这样的方法:

class TaskCompletedHandler{ // inner class
private static final int NUMBER_OF_RESPONSES = 4;//just example

private int tasksCompleted;

public void notifyOfCompletedTask(){
tasksCompleted++;
if (tasksCompleted == NUMBER_OF_RESPONSES){
blockerWindow.hide();
}
}
}

在显示模态窗口之前创建此类的实例,然后在 AsyncCallback 中通知此处理程序

service1.findDependenciesForListBox1(id1, new AsyncCallback<List<Dependency1DTO>>() {
public void onFailure(Throwable caught) {
taskCompletedHandler.notifyOfCompletedTask();
// exception handling here
}
public void onSuccess(List<Dependency1DTO> data) {
taskCompletedHandler.notifyOfCompletedTask();
// listBox1 filling here
}
});

关于java - 带有长任务进度条的模态窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19201247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com