プログラムで Swing Application Framework を使用しています。そして、私には長い仕事があります。私はそれに使用org.jdesktop.application.Task
します。私がこのプロジェクトに参加する前に、別のプログラマーが 2 つのタスクを書きました (プログラムについて彼に尋ねることはできません)。タスクの実行中、完了率を示すことなくプログレス バーが表示されますが、「待機」メッセージが表示され、タスクが終了していない間はメイン ウィンドウをクリックできません。それは結構です!しかし、ProgressBars が作成された場所が見つかりませんでした。どこかのxmlファイルやプロパティファイルに記述されているのではないでしょうか?
また、別のタスクを作成し、それらを実行すると、作成したプログレス バーが表示されないか、正しく表示されません。ProgressBar と ProgressMonitor について読みましたが、役に立ちません。Programm は someTask.execute() の後も引き続き実行されますが、ProgressBar、ProgressMonitor などを表示したいので、ユーザーはメイン ウィンドウをクリックできず、ウィンドウは正しく表示されます。ユーザーがウィンドウを変更すると、ウィンドウに黒い「ブロック」が表示されるようになりました。
私は使用する必要があるかもしれません org.jdesktop.application.TaskMonitor
。ここhttps://kenai.com/projects/bsaf/sources/main/content/other/bsaf_nb/src/examples/StatusBar.java?rev=235のように使用しようとしましたが、メイン ウィンドウが正しく表示されず、 ProgressBar は表示されません。
タスクがプログラムを実行しているときに必要ですが、ユーザーはプログレスバーを表示でき、操作をキャンセルでき、メインウィンドウをクリックできません。どうすればいいですか?
ここに私のコード:
public class A{
@Action(name = "ActionName", block = Task.BlockingScope.APPLICATION)
public RequestInfoTask requestInfo() {
RequestInfoTask task = new RequestInfoTask(Application.getInstance());
isSuccessedGetInfo=false;
task.addTaskListener(new TaskListener.Adapter<List<InfoDTO>, Void>() {
@Override
public void succeeded(TaskEvent<List<InfoDTO>> listTaskEvent) {
isSuccessedGetResources=true;
}
});
//Here I want to the program shows ProgressMonitor and user can not click to the main window.
//But small window with message "Progress..." is displayed for several seconds and disappear.
ProgressMonitor monitor = new ProgressMonitor(getMainView(), "Wait! Wait!", "I am working!", 0, 100);
int progress = 0;
monitor.setProgress(progress);
while(!task.isDone()){
monitor.setProgress(progress+=5);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
monitor.setProgress(100);
//This code must run after "task" finishes.
if(isSuccessedGetInfo){
MyTask2 task2 = new MyTask2(Application.getInstance());
isSuccessedTask2=false;
task2.addTaskListener(new TaskListener.Adapter<Map<?,?>, Void>(){
@Override
public void succeeded(TaskEvent<Map<String, ICredential>> arg0) {
isSuccessedTask2=true;
}
});
//Do something with results of task2.
}
return task;
}
}
public class RequestInfoTask extends Task<List<InfoDTO>, Void> {
public RequestInfoTask(Application application) {
super(application);
}
@Override
protected List<InfoDTO> doInBackground() throws Exception {
List<InfoDTO> result = someLongerLastingMethod();
return result;
}
}