たとえば、サーバーが一度に複数のクライアントにサービスを提供する Java のネットワーク プログラムがあり、各クライアントが ID を入力するだけで情報にアクセスできるとします。サーバーがクライアントのスレッドを開始する前に、クライアント プログラムの実行が開始されたときにユーザーが入力した ID が、現在実行中のスレッドによってまだ使用されていないこと、および特定の ID と一致することを確認する必要があります。パターン (たとえば 4 桁)。私がこれにアプローチした方法は、サーバークラスが何かを行う前に現在実行中のスレッドの ID の配列リストを宣言および初期化し、正規表現を使用して ID が 4 桁の長さであるかどうかを確認することです。次に、id が arraylist にあるかどうかを確認します。そうでない場合は、スレッドを開始できます。以下に示すコード:
while(true)
{
ClientWorker w;
try
{
w = new ClientWorker(server.accept());
String validid = w.accountnumber;
if(validid.matches("\\d[4]"))
{
if(!currentusers.contains(validid))
{
currentusers.add(validid);
Thread t = new Thread(w);
t.start();
}
else
{
System.out.println("Already in session");
}
}
else
{
System.out.println("not a valid id");
}
}
問題は、どちらの目的も達成されず、以前に動作していたプログラムにエラーが発生することです。入力した ID に関係なく、クライアントは問題なく続行し、どのトランザクションを実行したいかを尋ねてきます。次に、実際に何かを実行しようとすると、if ステートメントで正規表現を照合しようとしたり、メイン メソッドでクライアント ソケットに対応するポートをリッスンするようにサーバーに指示したりすると、サーバー プログラムがクラッシュし、null ポインター例外が発生します。問題は、スレッドが開始する前にクライアントのIDを取得する方法がわからないことだと思います。ユーザーがIDを入力して円を作成する前にスレッドを開始する必要があるように思われるからです。私が二乗しなければならないこと。誰でもこれで私を助けることができますか? PS: