执行摘要:使用 Swing 实时显示线程安全的动态数据有哪些合理的架构选择?
详细信息:我最近完成了用 Java 编写的多线程自动交易平台。我之所以说“平台”,是因为我通过对虚拟对象进行子类化,使得实现新的和多个交易程序变得非常容易。我已经封装了交易代码,因此我可以在 Swing 应用程序、控制台应用程序或任何其他应用程序中使用它。目前我正在使用 Swing 前端运行它。
我会说我是 Swing 滥用者而不是用户。不是故意的。开发现代 GUI 并将其与我尚未学习的动态数据集成需要一种特殊的思维方式。我知道非常基础的知识,例如仅在事件调度线程中更新屏幕。这是我显示消息的方式(来自我的SingleFrameApplication
子类):
private class PrintTraderMsgTask extends SwingWorker<Void, String>{
@Override
protected Void doInBackground() {
String msg;
while(!isCancelled()){
msg = m_data.m_TraderMsgs.poll();
if(msg!=null){
publish(msg);
}
}
return null;
}
@Override
protected void process(List<String> chunks) {
for (String item: chunks){
m_view.displayTraderString(item);
}
}
}
这里的数据元素只是
public ArrayBlockingQueue<String> m_TraderMsgs;
任何数量的“交易者”(单独的线程)都可能随时插入消息。我使用的另一种数据对象是ConcurrentHashMap
. 我在其中收集订单日志、交易记录、价格和其他类型的数据。因此,我在这里尝试绘制的图片是大量与时间相关的数据,太多了,无法一次显示。
我真正想做的是显示摘要信息并具有向下钻取的能力。现在我正在显示JTextAreas
一些信息和其他信息JTextFields
。我可以阅读 JCoolWhatever 并在其中填充数据。但在我开始这条路之前,我想了解其他架构选择。
方法 1:使用 SwingWorkers 抓取数据并将其粘贴JWhatever
在我的FrameView
子类中。
方法二:???
...
我们想要:
(1)合理的模块化......足以添加/删除元素而不会破坏我们的夜晚
(2)交互能力,特别是下钻能力,因为数据太多
谢谢... 一组复杂的动态数据的实时显示是一个有趣的主题,我希望我们能进行良好的讨论。