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 embtnRun
Chamei 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
.