偶然見つけた「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);
}
}
最初の for ループは基本的に、グラフのリストを調べて、グラフごとに GUI をロードします。その後のwhileループは、基本的に、ネットワークを介してデータを永久にポーリングし続けます。
シナリオは次のとおりです。グラフのみを表示している場合 (つまり、while ループをコメント アウトした場合)、グラフが表示されて開きます (ただし、何もポーリングしていないため、明らかに何も表示されません)。ただし、以下に示すすべてのコードを使用すると、グラフの GUI ウィンドウが開きますが、完全に灰色になり、コンテンツがありません。サイズを変更したり、なんらかの方法で操作しようとすると、アプリケーションがフリーズし、強制終了する必要があります。
ここでは、スレッド化がどういうわけか問題であるという問題にこれを絞り込みました。while ループは永久に実行され続け、そのために GUI が適切に実行されない可能性があります。これに対する解決策を探しています。おそらくスレッド化が必要です。ディスプレイを実行し、それぞれを個別のスレッドとしてポーリングするなど、いくつかの基本的なことを試しましたが、どこにも行きませんでした。