1
我想爲兩個客戶端發送相同的對象。我使用對象寫入非共享方法並讀取非共享。類我的對象是:靜態數據成員未通過對象發送通過套接字
package servidor;
import java.io.Serializable;
public class Token implements Serializable {
private static final long serialVersionUID = -5399605122490343339L;
public static String sender, receiver, content;
String id;
public Token(String sender, String receiver, String content){
Token.sender = sender;
Token.receiver = receiver;
Token.content = content;
}
public static Token returnToken(){
Token token = new Token(Token.sender, Token.receiver, Token.content);
return token;
}
public static String returnSender(){
return Token.sender;
}
public boolean hasToken(String id){
if(Token.sender.equals(id)){
return true;
}
else {return false;}
}
}
但是,當我使用的方法returnSender
在客戶端,回報是null
。我檢查了,我沒有錯誤收到readUnshared()
的對象。我有雙方的令牌包括在服務器包中。
我有一個線程爲每個客戶端,並且線程尋找相同的對象發送。
如何在不同的線程中爲不同的客戶端發送相同的對象?
但是,如果我的參數不是「靜態」類型,我不會在其他線程中訪問相同。我有一個主類和另外兩個類負責發送客戶端的對象。在主類中,執行我的問題的邏輯並創建對象。在另外兩個類中,對象是發送的。 – user3294746
@ user3294746我想你誤會了'static'的作用。作爲http://stackoverflow.com/questions/797964/what-is-the-exact-meaning-of-static-fields-in-java解釋,「靜態」字段用於共享*的所有實例之間的字段,同班。當任何其他類引用時,您的'Token'對象始終可以訪問其字段,無論是否爲靜態。 –
@ pens-fan-69,我使用靜態字段,因爲我沒有在另一個類中創建類Token的實例。例如,我的類創建我的令牌實例,我的類兩個訪問方法'returnToken()'並通過套接字發送給客戶端。問題是,當客戶端使用方法returnSender()時,方法返回null。 – user3294746