У меня есть Java-приложение, которое использует SwingWorker для обновления метки и индикатора выполнения в графическом интерфейсе, и оно прекрасно работает. Тем не менее, я хотел бы добавить функцию к этому параметру.
Мой рабочий процесс Swing выполняет задачу длиной n
и повторяет эту задачу m
раз. Прямо сейчас мой графический интерфейс просто сообщает мне, сколько раз задача повторялась, но я хотел бы, чтобы он также сообщал мне, на какой продолжительности задачи мы находимся. Скажем, n=300
и m=50
, я хотел бы что-то вроде:
Task 49 is at 248 ()
Task has been repeated 48 times
Что я должен изменить в моем SwingWorker?
/**
*
* @author digitaldust
*/
public class Model extends SwingWorker<Integer, Integer> {
private HashMap<String, Number> GUIparams;
private int session;
private int ticks;
Model(HashMap<String, Number> KSMParams) {
GUIparams = KSMParams;
session = (Integer)GUIparams.get("experimentsInSession");
ticks = (Integer)GUIparams.get("howManyTicks");
}
/**
* Actual simulation
*/
@Override
protected Integer doInBackground() throws Exception {
int i=0;
while(!isCancelled() && i<session){
i++;
int ii=0;
while(!isCancelled() && ii<ticks){
// this is n, the task length and I'd like to update the GUI with this value
ii++;
}
System.out.println(i);
// this is m, how many time the task has been repeated, and now it is updated in the GUI
publish(i);
setProgress(i);
Thread.sleep(1000);
}
return i;
}
/**
* Invoked when simulation exits
*/
@Override
protected void done() {
if (isCancelled()) {
Logger.getLogger(Model.class.getName()).log(Level.WARNING, "Experiment session cancelled by user. Closing Session...");
} else {
// do stuff
Logger.getLogger(Model.class.getName()).log(Level.WARNING, "Experiment session ended.");
}
}
}