Как избежать редактирования того же значения в форме в многопользовательской среде? - PullRequest
2 голосов
/ 06 декабря 2010

Моя среда: Многопользовательское приложение с сервером и клиентом. Сервер знает, какое поле используется в данный момент, и не может редактировать от другого пользователя.

У меня есть форма с несколькими компонентами JCheckBox, JTextField, JTextArea и JComboBox. Проблема в том, что я хочу контролировать, разрешено ли пользователю редактировать значение поля или нет. Когда пользователю не разрешено редактировать поле, компонент не может перейти в режим редактирования.

Например: Пользователь А редактирует значение текстового поля. Теперь пользователь B хочет изменить то же значение. Он нажимает на то же текстовое поле, и в этот момент я хочу убедиться, что текстовое поле не переключается в режиме редактирования.

Есть ли у кого-нибудь хорошая идея, где правильное место для этого чека? Нужно ли выполнять проверку в каждом отдельном компоненте, или, может быть, есть решение, которое подходит для всех компонентов J в моей форме?

Спасибо

Ответы [ 2 ]

1 голос
/ 06 декабря 2010

Сервер может поддерживать запрос на владение компонентом, который возвращает логическое значение, используемое клиентом. Реализация на стороне сервера должна поддерживать синхронизированную структуру данных, осведомленную о владельцах компонентов. Например, вы можете использовать ConcurrentHashMap (он поддерживает putIfAbsent, который выполняет атомарную операцию, которая может помочь).

Обратите внимание, что вам также потребуется, чтобы клиенты сообщали о выпуске компонента (возможно, также добавив тайм-аут владения на сервере).

1 голос
/ 06 декабря 2010

Я считаю, что вы можете предоставить общее решение.Создать слушателя EditabilityListener.Когда пользователь изменяет значение компонента, он должен отправлять сигнал на сервер, а все остальные пользователи должны его получать, поэтому их экземпляры JComponent становятся отключенными.

Проблема в параллельном доступе.Например, что бы вы хотели сделать, если бы пользователь A начал вводить текстовое поле через секунду после пользователя B, но до того, как сигнал поступил в его приложение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...