2

私の環境: サーバーとクライアントを備えたマルチユーザー アプリケーション。サーバーはどのフィールドが現在使用されているかを認識しており、別のユーザーから編集することはできません。

JCheckBox、JTextField、JTextArea、JComboBox などのいくつかの JComponents を含むフォームがあります。問題は、ユーザーがフィールドの値を編集できるかどうかを制御したいということです。ユーザーがフィールドの編集を許可されていない場合、コンポーネントは編集モードに移行できません。

例: ユーザー A がテキストフィールドの値を編集しています。ここで、ユーザー B が同じ値を編集したいと考えています。彼は同じテキストフィールドをクリックします。この時点で、編集モードでテキストフィールドが切り替わっていないことを確認したいと思います。

このチェックに適した場所がどこにあるのか、誰かが良い考えを持っていますか? すべてのコンポーネントにチェックを実装する必要がありますか?それとも、フォーム内のすべての JComponents に適合するソリューションはありますか?

ありがとう

4

2 に答える 2

1

私はあなたが一般的な解決策を提供できると信じています。リスナーを作成しますEditabilityListener。コンポーネントがサーバーにシグナルを送信し、他のすべてのユーザーがそれを取得する必要がある場合、ユーザーが値を変更すると、JComponentのインスタンスが無効になります。

問題は同時アクセスにあります。たとえば、ユーザーAがユーザーBの1秒後、信号がアプリケーションに到着する前にテキストフィールドに入力し始めた場合、どうしますか?

于 2010-12-06T13:03:50.803 に答える
1

サーバーは、クライアントが使用するブール値を返すコンポーネント所有権の要求をサポートできます。サーバー側の実装は、コンポーネントの所有権を認識して同期されたデータ構造を維持する必要があります。たとえば、ConcurrentHashMap を使用できます (これは、役立つアトミック操作を実行する putIfAbsent をサポートしています)。

クライアントがコンポーネントをリリースしたときにレポートする必要があることに注意してください(サーバーに所有権タイムアウトを追加することもできます)。

于 2010-12-06T13:05:34.013 に答える