我有一小段Java代码,它首先检查您输入IRC命令的参数是否存在,然后才选择运行哪个代码段。我正在通过PircBotX监听命令,下面描述的命令基本上是通过命令:? list (all)
列出服务器上的所有人员或通道中的所有人员。
if ( argments[1].equalsIgnoreCase( "list" ) ) {
CyniChat.printDebug( "Listing chosen..." );
if ( argments[2] != null && argments[2].equalsIgnoreCase( "all" ) ) {
CyniChat.printDebug( "You've either got 'all' as parameter..." );
CyniChat.printDebug( event.getUser().getNick()+" : "+thisChan.getName() );
ircResponses.listOutput( event.getUser(), event.getBot(), thisChan.getName(), true );
return;
} else {
CyniChat.printDebug( "Or you don't...." );
CyniChat.printDebug( event.getUser().getNick()+" : "+thisChan.getName() );
ircResponses.listOutput( event.getUser(), event.getBot(), thisChan.getName(), false );
return;
}
}
现在,关于这个语句的奇怪之处在于,当执行第一个调试语句时,控制台输出“Listing selected ......”,这是它输出的唯一内容。每当我在IRC中运行:? list
时,都没有执行任何其他调试语句。然而,当我运行:? list all
时,一切似乎都运行正常,语句按照正常情况执行。
很可能,我可能只是在一个我发现无法发现的地方发生了一个非常小的逻辑错误。如果有人对如何解决这种情况有任何想法,将非常感谢帮助。
感谢。
答案 0 :(得分:2)
如果输入:? list
,那就是2个参数。但是如果你通过argments[2]
检查第三个,这将抛出索引超出范围的异常。您没有看到错误消息的原因是您可能有catch
块忽略它而不打印错误。你需要找到这个catch
,至少把它放在里面:
catch (Exception e) {
e.printStackTrace();
}
将来,永远不会让catch块空了。始终记录某些内容,否则在发生错误时您将无法注意到。
答案 1 :(得分:1)
替换
if ( argments[2] != null && argments[2].equalsIgnoreCase( "all" ) ) {
...
}
带
if (arguments.length > 2 && argments[2] != null && argments[2].equalsIgnoreCase( "all" ) ) {
...
}
这可以确保在您尝试访问它之前,数组中有第三个元素。