Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 循环结束,但不';T_Java_Android_While Loop - Fatal编程技术网

Java 循环结束,但不';T

Java 循环结束,但不';T,java,android,while-loop,Java,Android,While Loop,我有一个while循环,它将使用缓冲读取器读取的元素添加到ArrayList中。循环工作正常,除非在它完成后,应用程序似乎无法继续。有关守则如下: int ctr = 1; while((test = bf.readLine()) != null) { Log.i(TAG, test); users.add(test); Log

我有一个while循环,它将使用缓冲读取器读取的元素添加到ArrayList中。循环工作正常,除非在它完成后,应用程序似乎无法继续。有关守则如下:

            int ctr = 1;
            while((test = bf.readLine()) != null)
            {

                Log.i(TAG, test);
                users.add(test);
                Log.i(TAG, "" + (ctr++));

            }
            Log.i(TAG, "Loop done.");
循环中的两条日志语句各执行4次,这是正常行为。但是,循环后的语句不会执行。就像被卡住了一样。我很确定它也不会进入循环,因为其中的两条日志语句也不再执行

bf是BufferedReader,users是ArrayList

LogCat输出:

08-04 01:35:37.472: I/UM(2937):     UserInfo{0:Primary:3}
08-04 01:35:37.472: I/UM(2937): 1
08-04 01:35:37.476: I/UM(2937):     UserInfo{1:Test1:0}
08-04 01:35:37.476: I/UM(2937): 2
08-04 01:35:37.476: I/UM(2937):     UserInfo{2:test2:0}
08-04 01:35:37.480: I/UM(2937): 3
08-04 01:35:37.480: I/UM(2937):     UserInfo{3:testxyz:0}
08-04 01:35:37.480: I/UM(2937): 4

有人知道我的(可能是愚蠢的)错误是什么吗?

您的代码在线路上阻塞:

 while((test = bf.readLine()) != null)
这样做是因为向
bf
提供数据的流从未关闭


(这个答案不是我的,它只是评论中的一个简短摘要。)

您的代码在线路上阻塞:

 while((test = bf.readLine()) != null)
这样做是因为向
bf
提供数据的流从未关闭


(这个答案不是我的,它只是评论中的一个简短总结。)

我想这是条件:

while((test = bf.readLine()) != null)
这样想:

Console ("line1\nline2\n")
---->  BufferedReader ("line1\n", "line2\n")
---->  bf.readline() ("line1\n")
---->  bf.readline() ("line2\n")
您的条件是检查控制台何时完全关闭其连接,此时BufferedReader将注意到并返回
null


实际上,控制台与BufferedReader的连接仍然是打开的。BufferedReader正在等待另一个
\n
从控制台传入,然后
readLine()
将返回“line3\n”。

我预计是以下情况:

while((test = bf.readLine()) != null)
这样想:

Console ("line1\nline2\n")
---->  BufferedReader ("line1\n", "line2\n")
---->  bf.readline() ("line1\n")
---->  bf.readline() ("line2\n")
您的条件是检查控制台何时完全关闭其连接,此时BufferedReader将注意到并返回
null


实际上,控制台与BufferedReader的连接仍然是打开的。BufferedReader正在等待另一个
\n
从控制台传入,然后
readLine()
将返回“line3\n”。

能否包含日志语句?另外,您说“循环中的两个日志语句各执行4次”和“循环中的两个日志语句不执行”——这是什么?BufferedReader从中读取的是什么?它可能正在阻塞(但实际上尚未结束)。是否有可能
readLine()
方法正在阻塞以等待更多输入?@raghasood那么这就是Rob所说的,它正在等待更多输入。键入Ctrl+D(在Linux上)或Ctrl+Z(在Windows上)以表示输入结束。如果是这样,你们中的一个应该将其作为答案发布,以便可以接受。可以包含日志语句吗?另外,您说“循环中的两个日志语句各执行4次”和“循环中的两个日志语句不执行”——这是什么?BufferedReader从中读取的是什么?它可能正在阻塞(但实际上尚未结束)。是否有可能
readLine()
方法正在阻塞以等待更多输入?@raghasood那么这就是Rob所说的,它正在等待更多输入。键入Ctrl+D(在Linux上)或Ctrl+Z(在Windows上)以表示输入结束。如果是这样,你们中的一个应该将其作为答案发布,以便可以接受。如果Izkata在几分钟内没有发布,我将接受此消息。优先选择那个,因为他首先提供了解决方案。如果Izkata在几分钟内没有发布,我会接受这个。优先选择那个,因为他首先提供了解决方案。