Java Swing GUI замръзва - модел на наблюдател

За програма, която създавам, използвах модела на наблюдател, но докато моят Observable изпраща данни почти постоянно, симулирани с цикъл тук, тъй като действителният код е свързан към устройство и измерва данните, моята актуализация(); методът работи както трябва, но не се люлее.

Swing актуализира JTextField само СЛЕД като цикълът приключи, но когато използвам System.out.println(), той итерира добре всяка актуализация.

Наблюдаем код:

public void collectData()
{

    for(int i = 0; i < 10; i++)
    {
        currRandom = (Math.random() * 10);
        for(Observer o : observers)
        {
            notify(o);
        }

    }
}

Код на наблюдател (SWING):

public void update()
{
    jRecievedData.setText(jRecievedData.getText() + "\n" + Double.toString(PVC.pc.getCurr()));
    jlAverage.setText("Average: " + PVC.getAverage());
    jlMin.setText("Minimum: " + PVC.getMin());
    jlMax.setText("Maximum: "+ PVC.getMax());

    // setText updates slow
}

Всяка помощ ще бъде много оценена! (Имам чувството, че това ще бъде проблем с нишките, но не съм сигурен и ако е така, все още не знам как да направя това със swing)


person Dylan Meeus    schedule 26.10.2013    source източник
comment
Предполагам, че notify извиква метода update(). Тъй като методът update() променя съдържанието на текстовото поле, уверете се, че е извикан в EDT ( нишка за изпращане на събития).   -  person avis    schedule 26.10.2013
comment
Работи в EDT, без успех =(   -  person Dylan Meeus    schedule 27.10.2013


Отговори (1)


Вместо да преглеждате изрично вашите наблюдатели, оставете Observable да го направи, както е показано тук.

this.setChanged();
this.notifyObservers();

Също така проверете дали не блокирате нишката за изпращане на събития . Ако е така, обмислете използването на SwingWorker, което значително опростява нишките на Swing .

person trashgod    schedule 26.10.2013
comment
Благодаря ви, използвах SwingWorker и след като разбрах как да накарам това да работи с моята бъркотия с шаблони, всичко работи като чар! - person Dylan Meeus; 27.10.2013