【发布时间】:2018-02-02 19:35:02
【问题描述】:
我已经尝试了我所知道的一切来解决这个问题,但我没有弄清楚。下面是将返回线程名称的类中的代码。现在,如果线程的名称与提供给此方法的名称匹配,那么它将返回该 ArrayList 的索引。问题是,布尔值是真的,但它似乎从未进入 if 语句。只是在它周围移动,而是返回 ERROR_NOTFOUND 符号。这意味着程序将忽略 if 语句的内容并继续进行第二次返回,完全绕过了第一次返回的机会。因此永远不会达到'return i;'....
我已经调试了很多次都无济于事,几乎没有答案。随意运行任意代码并自己尝试。我已将项目完全剥离到此,但仍然一无所获。然而,应用我在下面的答案是可行的。
我的想法是它与使用的关键字有关。此外,在我寻找答案的过程中,我还没有遇到任何有帮助的东西。因此,如果在某个地方有答案,请告诉我,以便我能够提高搜索技能。
private static int searchThread(ArrayList<Thread> threads, String name) {
int i;
for (i = 0; i < threads.size(); i++) {
Thread thread = threads.get(i);
String temp = thread.getName();
Boolean bool = temp.equals(name);
if (bool) {
return i;
}
}
return ERROR_NOTFOUND;
}
编辑:为了进一步了解细节,我已经调试了这段代码。我也尝试清理和重建,认为这是问题所在,但都没有帮助。所以这是我的逻辑问题或缺乏理解所使用的关键字、使用的 UI 线程或其他我不知道的东西的真正影响.. 代码部分在 UI 线程上运行的任何方式都不是问题到目前为止? if 语句不被忽略,“return i”被替换为“return 1”。然后它会成功返回 1。
【问题讨论】:
-
你怎么知道
bool是真的?你调试了吗?你打印出来了吗?有threads吗? -
1) 您是否记录了
bool以验证它的真实性? 2)searchThread是否在 UI 线程上运行? 3) 为什么不volatile boolean bool = temp.equals(name);? -
如果你的线程数组为空,它不会进入循环
-
好吧,除非有一些看不见的线程问题,否则条件真的不应该失败,并且
searchThread()的实际返回应该在方法之外是正确的。无论如何,调试器总是在跟踪方法中的多个返回路径时遇到问题:stackoverflow.com/questions/21805868。当您将其更改为单个return时,问题已解决。