我正在尝试使用框架在 java 中创建一个简单的聊天程序。用户可以托管服务器(通过单击服务器按钮)或作为客户端连接(使用连接按钮)。我遇到的问题是服务器按钮。我的目标是,当单击 Start server 按钮时,所有其他按钮和字段都被禁用,并且 startServer 方法应该运行。
整个程序在一个while (!kill)
循环中,现在,它只是检查 isServer 布尔值。
while (!kill)
{
if (isServer)
{
startServer();
}
}
当 startServerButton 被按下时,isServer 在 actionPerformed 内部设置为 true。
我的问题是 startServer() 永远不会运行,因为当单击 startServerButton 时,while (!kill) 循环没有获得更新的 isServer 值。
这是我的运行方法:
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% 确定这是多么有效。