サーバーとクライアントというチャット用のプログラムをいくつか作成しています。
どちらもSWTで作成されたGUIを備えています。サーバーは常に正常に動作します。
反対側では、クライアントのGUIはそうではありません。サーバーに接続すると、クライアントは接続されているクライアントについて質問し、サーバーはXメッセージ(名前ごとに1つずつ)で応答します。サーバーが実際に名前を送信し、クライアントがそれらを受信することを確認しました。
ただし、メッセージを受信した場合でも、GUIにメッセージが表示される場合と、表示されない場合があります。同じ実行でも、GUIに入れることができる名前とできない名前があります。
特にGUIを変更する方法に関しては、SWTの問題になる可能性があると思います。
ご想像のとおり、GUIを変更する場合でも、スレッドを使用しています。スレッドからGUIを変更したいので、メソッド「Display.asyncExec」を使用する必要があります。したがって、GUIで変更を行うたびに、次のようにします。
OurDisplay.asyncExec( new Runnable() {
public void run()
{
MyText.append("#The user " + OurName + " has asked us about other clients\n");
}
});
サーバーは同じものを使用しているので、どこで問題が発生する可能性があるのかわかりませんが、正常に動作します。
メイン(サーバーとクライアントの両方)プログラムで、作業しているウィンドウ(シェル)を閉じる前にプログラムの実行を終了しないために、この他のコードを使用していることに気付くかもしれません。
while (!ServerShell.isDisposed())
{
if (!ourDisplay.readAndDispatch())
ourDisplay.sleep();
}
何か案が?
ありがとう
-編集-コメントへの回答nº1-(コメントで回答することはできません。理由はわかりません)
私はしませんでした。スレッドにGUIの変更を待機させるために、「syncExec」メソッドを試してみました。ただし、これはどちらも機能しません。
ディスプレイキューの表示方法がわかりません。探しています。アイデアをありがとう。
そして、Runnableがスローする可能性のある例外をキャッチしようとします。ニュースを報告します。