当使用api Pircbot(Irc Bot API)时,我需要调用一个方法,该方法等待直到从不同的方法更改hasmap。 例: 用户执行命令!isRegistered。现在,Pircbot会检查用户是否由NickServ注册。
@Override
protected void onMessage(String channel, String sender, String login, String hostname, String message) {
if (command("isRegistered", message) && checkRegistered(sender)) {
sendMessage(sender,"You are registered);
}
};
我想,HashMap<String, Boolean>
是这样做的正确方法。
private void checkRegistered(String sender) {
checkRegister.put(Sender,null);
sendMessage("NickServ", "info sender");
//Wait till onNotices changes the HashMap so that i can get an result (hasmap content: null -> true, or false) and returning this result)
//A simple Thread.sleep(); does not work, because everything runs on the main Thread. -> When sleeping the bot times out, because it can't reply to the /ping command from the server.
}
每当pircbot收到NOTICE时,我都可以使用
获取字符串 @Override
protected void onNotice(String sourceNick, String sourceLogin, String sourceHostname, String target, String notice) {
所以我这样做了:
@Override
protected void onNotice(String sourceNick, String sourceLogin, String sourceHostname, String target, String notice) {
if (sourceLogin.equals("NickServ")) {
for (String s : checkRegister.keySet()) {
if (notice.contains("Nickname:") && notice.contains(s)) {
checkRegister.put(s, notice.contains("<< ONLINE >>"));
}
}
}
}
我现在如何检查hasmap是否已更改,例如来自null - &gt; true或from null - &gt; checkRegistered();
方法中的错误是什么?
答案 0 :(得分:1)
你可以混合使用Observer-Observable和HashMap。
一开始,客户将自己注册为Observers或HashMap,当Map中的某些内容发生变化时,会向所有观察者发送一条消息。
观察员示例代码:
http://javarevisited.blogspot.ca/2011/12/observer-design-pattern-java-example.html http://www.journaldev.com/1739/observer-design-pattern-in-java-example-tutorial
具体来说,对于您的问题“我现在如何在checkRegistered()方法中检查hasmap是否从null - > true或从null - &gt; false更改?”
将通知客户端属性的值已从一个值更改为另一个值,这意味着该消息将包含属性名称,当前值和新值。