Java Swing GUI 卡住 - 观察者模式

标签 java swing jtextfield observer-pattern

对于我正在创建的程序,我使用了观察者模式,但虽然我的 Observable 几乎不断地发送数据,但这里用循环进行模拟,因为实际代码连接到设备并测量数据,我的 update();方法按其应有的方式运行,但 swing 却没有。

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 做到这一点)

最佳答案

不要显式地循环观察者,而是让 Observable 来完成它,如图所示here .

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

此外,请验证您没有阻止 event dispatch thread 。如果是这样,请考虑使用 SwingWorker ,这极大地简化了 Swing 线程。

关于Java Swing GUI 卡住 - 观察者模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19603919/

相关文章:

java - 使用 DocumentFilter 仅接受 JTextField 中的 double 值

java - 为什么在Java中使用4个空格作为缩进单位?

java - Jackson:枚举实例方法以字符串形式返回值

Java:使用drawArc绘制圆形螺旋

java - JScrollPane 无法正常工作

java - 使按钮识别 JTextField 中的文本

java - 将 JTextField 文本存储到数组中并求和 - Java

java - 如何用vavr修复函数的第二个参数?

java - 使用循环 for 将内容添加到 linkedList java

Java Paint 程序绘制形状