其中一個構造函數具有下面的命令序列:什麼會導致掛在這個「無害」的Java命令序列中?
log.info("A new session of the game started.");
clientsListener = new ClientsListener(earPort, userName, players, this);
在日誌文件中我具有由代碼的第一行所產生的語句。所述ClientsListener
的構造被寫入通過以下方式:
public ClientsListener(int earPort, String userName, String[] players, Game game) {
this.earPort = earPort;
this.userName = userName;
this.players = players;
this.game = game;
ServiceBrowser browser;
for (String playerName: players) {
String serviceType = "_" + playerName + "._tcp.";
browser = BrowsersGenerator.getBrowser(serviceType,game);
browser.post(userName + ":infoRequest=infoRequest");
}
}
的BrowsersGenerator.getBrowser
具有下面的命令簡單序列:
public static ServiceBrowser getBrowser(String serviceType, Game game) {
if (!name2browser.containsKey(serviceType)) {
name2browser.put(serviceType, new ServiceBrowser(serviceType, game));
}
return name2browser.get(serviceType);
}
在上述方法我實例化ServiceBrowser
。這個類的構造是:
public ServiceBrowser(String serviceType, Game game) {
this.serviceType = serviceType;
this.game = game;
status = "notActivated";
}
然後,在我請的ClientsListener
(的代碼的第二塊)的構造。此方法的第一行包含以下內容:
game.log.fine("We entered the post method");
並且此語句在日誌文件中不存在。所以,軟件掛在兩次嘗試寫入日誌文件之間。我無法弄清楚代碼中哪些部分是壞的。一切看起來都保存給我。主要問題是我無法重現問題。我發生的情況非常罕見,我只有一個日誌文件需要分析。有誰能幫我解決這個問題嗎?
你在構造函數中做了很多工作,包括建立網絡連接。這通常被認爲是不好的做法。只需在構造函數中構造對象,然後用單獨的方法完成網絡內容。 –
@保羅湯姆林,它會導致問題嗎? – Roman
如果這些方法中的任何一個引發異常,那麼最終會生成一個半結構化的對象。 –