как обновить графический интерфейс с помощью swingworker, который возвращает два разных значения

У меня есть 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.");
        }
    }

}
6
задан Andrew Thompson 14 June 2012 в 14:31
поделиться