JFrame congela enquanto executa o código continuamente

Eu tenho problema ao trabalhar comJFrame, que fica congelada enquanto executa o código continuamente. Abaixo está o meu código:

Ao clicar embtnRunChamei a funçãoMainLoop():

ActionListener btnRun_Click = new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        MainLoop();
    }
};

Implementação deMainLoop():

void MainLoop()
{
    Hopper = new CHopper(this);
    System.out.println(Hopper);
    btnRun.setEnabled(false);
    textBox1.setText("");
    Hopper.getM_cmd().ComPort = helpers.Global.ComPort;
    Hopper.getM_cmd().SSPAddress = helpers.Global.SSPAddress;
    Hopper.getM_cmd().Timeout = 2000;
    Hopper.getM_cmd().RetryLevel = 3;


    System.out.println("In MainLoop: " + Hopper);

    // First connect to the validator
    if (ConnectToValidator(10, 3))
    {
        btnHalt.setEnabled(true);
        Running = true;

        textBox1.append("\r\nPoll Loop\r\n"
                + "*********************************\r\n");
    }

    // This loop won't run until the validator is connected
    while (Running)
    {
        // poll the validator
        if (!Hopper.DoPoll(textBox1))
        {
            // If the poll fails, try to reconnect
            textBox1.append("Attempting to reconnect...\r\n");
            if (!ConnectToValidator(10, 3))
            {
                // If it fails after 5 attempts, exit the loop
                Running = false;
            }
        }
        // tick the timer
                // timer1.start();
        // update form
        UpdateUI();
        // setup dynamic elements of win form once
        if (!bFormSetup)
        {
            SetupFormLayout();
            bFormSetup = true;
        }

    }

    //close com port
    Hopper.getM_eSSP().CloseComPort();

    btnRun.setEnabled(true);
    btnHalt.setEnabled(false);
}

NoMainLoop() função, o loop while está sendo executado continuamente até a execução é verdadeiro problema é que se eu quiser parar esse loop while eu tenho que definir Running para false, que é feito em outro botãobtnHalt:

ActionListener btnHalt_Click = new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        textBox1.append("Poll loop stopped\r\n");
        System.out.println("Hoper Stopped");
        Running = false;
    }
};

masbtnHalt não está respondendo, o frame inteiro fica congelado, também não mostrando nenhum log notextarea.

questionAnswers(1)

yourAnswerToTheQuestion