Резюме: Какие варианты звуковой архитектуры существуют для отображения потокобезопасных динамических данных в реальном времени с использованием Swing?Архитектура для отображения динамических данных в реальном времени
: Я недавно завершил создание многопоточной автоматизированной торговой платформы на Java. Я говорю «платформа», потому что я очень упростил реализацию новых и нескольких торговых программ путем подклассификации виртуальных объектов. Я инкапсулировал торговый код, поэтому я могу использовать его в приложении Swing, консольном приложении или любом другом. В настоящее время я запускаю его с интерфейсом Swing.
Я бы сказал, что я жестокий человек, а не пользователь. Не специально. Для разработки современного графического интерфейса требуется интеграция с динамическими данными, которые мне еще предстоит изучить. Я знаю самые основы, такие как обновление экрана только в потоке отправки событий. Вот как я показывать сообщения (от моего 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;
которой любое число «Traders» (отдельные нити) могут быть торчащие сообщения в на в любой момент. Другой тип объекта данных, который я использовал, - ConcurrentHashMap
. Я собираю журналы заказов, торговые записи, цены и другие виды данных. Таким образом, картина, которую я пытаюсь рисовать здесь, представляет собой большую коллекцию зависящих от времени данных, слишком много для отображения всех сразу.
Что бы я хотел сделать, это отобразить сводную информацию и иметь возможность развернуть. Прямо сейчас я показываю сообщения в JTextAreas
и другую информацию в некотором JTextFields
. Я могу читать JCool, какие бы то ни было и какие данные были там. Но прежде чем я начну с этой дороги, я хочу узнать о других вариантах архитектуры.
Метод 1: Используйте SwingWorkers, чтобы захватить данные и вставить его в JWhatever
который находится в моем FrameView
подкласса.
Способ 2: ???
...
Мы хотим:
(1) разумной модульности .. достаточно, чтобы добавить/удалить элементы, не разрушая наш вечер
(2) Возможность взаимодействия, в частности возможности бурить вниз поскольку так много данных
Спасибо ... отображение сложного набора динамических данных в режиме реального времени является интересной темой, и я надеюсь, что мы сможем продолжить хорошее обсуждение.
Что именно вы имеете в виду под «сводной информации» и «развернуть»? Является ли сводка только номерами разных типов сообщений? Или ваши сообщения имеют больше структуры, и вам нужно суммировать их (например, количество акций в заказах)? –
Итоговой информацией может быть список торговых программ, их текущая позиция и текущая прибыль/убыток (PnL). «Дрель» может нажимать на торговую программу, запускающую отображение всех ее сделок на другой панели. Это всего лишь один пример. – Pete