[英]Loop isn't getting updated boolean value from actionPerformed in java
我正在嘗試使用框架在Java中創建一個簡單的聊天程序。 用戶可以托管服務器(通過單擊服務器按鈕),也可以作為客戶端連接(使用連接按鈕)。 我遇到的問題是服務器按鈕。 我的目標是,當單擊“啟動服務器”按鈕時,所有其他按鈕和字段都被禁用,並且startServer方法應該運行。
整個程序處於while (!kill)
循環中,而現在,它只是檢查isServer布爾值。
while (!kill)
{
if (isServer)
{
startServer();
}
}
在按下startServerButton時,在actionPerformed中將isServer設置為true。
我的問題是startServer()永遠不會運行,因為單擊startServerButton時while(!kill)循環未獲取更新的isServer值。
這是我的運行方法:
public void run()
{
conversationBox.appendText("Session Start.\n");
inputBox.requestFocus();
while (!kill)
{
if (isServer)
{
startServer();
}
}
}
這是我執行的動作:
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()
對象內部。 我不確定這有多有效。
在這一行: if (isServer)
您的意思是說if (isServer == true)
如果單擊按鈕時isServer
設置為true?
以我的經驗, "if" statements
應始終具有條件,例如if (variable1.equals(variable2))
或if (boolean == true)
。
或問題可能出在您的while(!kill)循環中。 在這種情況下,只需取出if語句,然后查看該方法是否隨后運行。
Java中的Volatile關鍵字用作Java編譯器和Thread的指示符, 它們不緩存此變量的值,而始終從主內存中讀取它。 因此,如果您想共享實現中原子的讀寫操作所涉及的任何變量,例如int或boolean變量中的讀寫,則可以將它們聲明為volatile變量。
這里是一個鏈接:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.