フレームを使用して、Javaで簡単なチャットプログラムを作成しようとしています。ユーザーは、サーバーをホストする(サーバーボタンをクリックする)か、クライアントとして接続する(接続ボタンを使用する)ことができます。私が抱えている問題はサーバーボタンです。私の目標は、[サーバーの開始]ボタンをクリックすると、他のすべてのボタンとフィールドが無効になり、startServerメソッドが実行されるようにすることです。
プログラム全体がwhile (!kill)
ループ内にあり、現在、isServerブール値をチェックしているだけです。
while (!kill)
{
if (isServer)
{
startServer();
}
}
startServerButtonが押されると、actionPerformed内でisServerがtrueに設定されます。
私の問題は、startServerButtonがクリックされたときにwhile(!kill)ループが更新されたisServer値を取得しないため、startServer()が実行されないことです。
これが私のrunメソッドです:
public void run()
{
conversationBox.appendText("Session Start.\n");
inputBox.requestFocus();
while (!kill)
{
if (isServer)
{
startServer();
}
}
}
これが私のactionPerformedです:
public void actionPerformed(ActionEvent e) throws NumberFormatException
{
Object o = e.getSource();
if (o == sendButton || o == inputBox)
{
if(inputBox.getText() != "")
{
clientSendMsg = inputBox.getText();
inputBox.setText("");
}
}
if (o == changeHost || o == hostField)
{
if (hostField.getText() != "" && hostField.getText() != host)
{
host = hostField.getText();
conversationBox.appendText("Host changed to " + host + "\n");
}
}
if (o == changePort || o == portField)
{
if (portField.getText() != "" && Integer.valueOf(portField.getText()) != port)
{
try
{
port = Integer.valueOf(portField.getText());
conversationBox.appendText("Port changed to " + port + "\n");
}
catch(NumberFormatException up)
{
throw up; //blargh enter a real value
}
}
}
if (o == startServerButton)
{
isServer = true;
startServerButton.enable(false);
connectButton.enable(false);
changeHost.enable(false);
changePort.enable(false);
sendButton.enable(false);
hostField.enable(false);
portField.enable(false);
inputBox.enable(false);
}
inputBox.requestFocus();
}
明らかに、プログラムは完全にはほど遠いですが、これは無視するのにかなり大きなハードルであるため、問題を解決する前に修正するのが最善だと思いました。また、フレームレイアウトを作成するオブジェクトのnew Thread(this).start();
内部があることに注意してください。Chat()
これがどれほど効果的かは100%わかりません。