Uma barra de progresso pode ser usada em uma classe fora de main?

No momento, meu principal chama apenas uma GUI com 10 linhas. Com base em quantas dessas linhas têm texto, uma das 9 classes é chamada (duas linhas devem ter texto). A classe chamada realiza cálculos aos quais eu gostaria de ter a barra de progresso vinculada. Aqui está um exemplo de uma das classes chamadas (cada classe é semelhante, mas diferente o suficiente para justificar uma nova classe.) Acredito que o problema seja uma violação das regras da EDT, mas todos os exemplos que vi nelas envolvem uma principal argumento. O quadro aparece quando o código é executado, mas a barra de progresso não é atualizada até que todos os cálculos sejam concluídos.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class twoLoan extends JFrame {

    static JFrame progressFrame;
    static JProgressBar progressBar;
    static Container pane;
    double amountSaved = 0;
    int i = 0;

    public void runCalcs(Double MP, Double StepAmt,
        Double L1, Double L2, Double C1, Double C2,
        Double IM1, Double IM2, Double M1Start, Double M2Start) {

        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
        }

        int iterations = (int) (MP - (M1Start * M2Start));

        //Create all components
        progressFrame = new JFrame("Calculation Progress");
        progressFrame.setSize(300, 100);
        pane = progressFrame.getContentPane();
        pane.setLayout(null);
        progressFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        progressBar = new JProgressBar(0, iterations);

        //Add components to pane
        pane.add(progressBar);

        //Position controls (X, Y, width, height)
        progressBar.setBounds(10, 10, 280, 20);

        //Make frame visible
        progressFrame.setResizable(false); //No resize
        progressFrame.setVisible(true);

        double M1 = M1Start;
        double M2 = M2Start;

        // Set MinLoop as maximum to start
        // Loan 1
        double N1 = (Math.log10(1 - IM1 * L1 / M1) * -1) / Math.log10(1 + IM1);
        double M1Sum = M1 * N1;
        // Loan 2
        double N2 = (Math.log10(1 - IM2 * L2 / M2) * -1) / Math.log10(1 + IM2);
        double M2Sum = M2 * N2;
        double minLoop = M1Sum + M2Sum;
        double MTotal = 0;


        // Define variables for mins
        double MP1 = 0;
        double MP2 = 0;
        double NP1 = 0;
        double NP2 = 0;
        double MP1Sum = 0;
        double MP2Sum = 0;

        while (M1 <= MP - M2Start && M2 >= M2Start) {
            N1 = (Math.log10(1 - IM1 * L1 / M1) * -1) / Math.log10(1 + IM1);
            M1Sum = N1 * M1;
            N2 = (Math.log10(1 - IM2 * L2 / M2) * -1) / Math.log10(1 + IM2);
            M2Sum = N2 * M2;
            MTotal = M1Sum + M2Sum;
            if (MTotal < minLoop) {
                minLoop = MTotal;
                MP1 = M1;
                MP2 = M2;
                NP1 = N1;
                NP2 = N2;
                MP1Sum = M1Sum;
                MP2Sum = M2Sum;
            } // end if
            M1 = M1 + StepAmt;
            M2 = MP - M1;
            // Reset monthly sums
            M1Sum = 0;
            M2Sum = 0;
            i++;
            progressBar.setValue(i);
            progressBar.repaint();
            if (i >= iterations) {
                progressFrame.dispose();
            }
        } // end while

        // if there's a value for current payments, calculate amount saved
        if (C1 > 0) {
            double CN1 = (Math.log10(1 - IM1 * L1 / C1) * -1) / Math.log10(1 + IM1);
            double CT1 = CN1 * C1;

            double CN2 = (Math.log10(1 - IM2 * L2 / C2) * -1) / Math.log10(1 + IM2);
            double CT2 = CN2 * C2;

            double CTotal = CT1 + CT2;
            amountSaved = CTotal - minLoop;
        }

    } // end method runCalcs

    //Workbook wb = new HSSFWorkbook();
    public double savedReturn() {
        return amountSaved;
    }
} // end class twoLoans  

questionAnswers(3)

yourAnswerToTheQuestion