Java 图形用户界面冻结和不显示';I'时不加载;m轮询数据

Java 图形用户界面冻结和不显示';I'时不加载;m轮询数据,java,java-threads,Java,Java Threads,我正在使用一个名为“LiveGraph”的库创建一个实时图形应用程序,这是我偶然发现的。从本质上讲,LiveGraph应用程序是一个GUI,它不断从包含数据的文本文件中读取数据,并更新相应的图形 以下是我的代码片段(解释如下: for (VisualDisplay vd : visDisplayElements) { vd.display(); System.out.println("Done executing."); } while (!dcm.done) { St

我正在使用一个名为“LiveGraph”的库创建一个实时图形应用程序,这是我偶然发现的。从本质上讲,LiveGraph应用程序是一个GUI,它不断从包含数据的文本文件中读取数据,并更新相应的图形

以下是我的代码片段(解释如下:

for (VisualDisplay vd : visDisplayElements) {
    vd.display();
    System.out.println("Done executing.");
}

while (!dcm.done) {
    String packet = dcm.run();
    HashMap<String, Integer> dataMap = initializeMap (packet, config.delimiter, config.colNames);
    for (VisualDisplay element : visDisplayElements) {
        element.receivedDataSet(dataMap);
    }
}
用于(VisualDisplay vd:visDisplayElements){
vd.display();
System.out.println(“完成执行”);
}
而(!dcm.done){
String packet=dcm.run();
HashMap dataMap=initializeMap(数据包,config.delimiter,config.colNames);
用于(VisualDisplay元素:visDisplayElements){
元素。接收数据集(数据映射);
}
}
第一个for循环基本上遍历了图形列表,并为每个图形加载GUI。之后的while循环基本上保持通过网络永久轮询数据

现在是这样的场景:当我只显示图形时(即,如果我注释掉while循环),图形显示并打开(但显然不显示任何内容,因为没有轮询)。但是,使用如下所示的所有代码,图形的GUI窗口将打开,但完全变为灰色,没有任何内容。如果我尝试调整大小或以任何方式与它们交互,应用程序将冻结,我必须强制退出


我把这个问题缩小到线程在某种程度上是一个问题。while循环将永远运行,可能GUI将因此无法正常运行。我正在寻找一个解决方案,这可能涉及线程。我尝试了一些基本的事情,例如运行显示和轮询每个线程,但我毫无进展。

您正在阻止UI框架事件调度线程,该线程负责处理绘制事件。解决方案将取决于您所在的框架using@MadProgrammer我使用的框架是LiveGraph(),是的,但我认为它是基于Swing框架的