当前位置: 首页 > 面试题库 >

readline()在Java中返回null

勾起运
2023-03-14
问题内容

我正在尝试在Java程序中阅读标准输入。我期望一系列数字后跟换行符,例如:

6  
9  
1

当通过eclipse内置控制台提供输入时,一切都会顺利进行。但是,使用Windows命令行时,程序将输出:

Received '6'.  
Received 'null'.  
Invalid input. Terminating. (This line is written by another function that does an Integer.parseint()).

我的代码是:

static String readLineFromStdIn(){  
try{  
        java.io.BufferedReader stdin = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));  
        String input = new String();  
        input = stdin.readLine();  
        System.out.println("Received '" + input + "'");  
        return(input);  
    }catch (java.io.IOException e) {  
        System.out.println(e);   
    }  
    return "This should not have happened";  
}

有什么线索吗?


问题答案:

得到a null表示相关Reader对象已到达EOF(文件末尾),或者换句话说,它们无法再获得任何标准输入。现在,您的代码明显的问题是:

  1. 的每个方法调用readLineFromStdIn()都会创建一个 新的 BufferedReader
  2. 每个这样的BufferedReader都将彼此“竞争”以获得相同的共享输入System.in
  3. 而且这些BufferedReader对象都没有被正确关闭,因此您的程序每次调用都会泄漏I / O资源readLineFromStdIn()

解决方案是对的每次调用使用 单个 共享库。BufferedReader``readLineFromStdIn()



 类似资料:
  • 我有以下代码: 在过程中的某个时候,它会冻结并且不前进。它不会向readLine()方法返回任何内容,并且会陷入等待不返回的内容。我如何管理这种等待?谢谢

  • 问题内容: 我正在使用以下代码建立HTTP连接并读取数据: 但是,尽管服务器确实返回了“ \ r \ n”,但它似乎不是字符串()的一部分。如何读取数据并检测“ \ r \ n”? 谢谢, 乔尔 问题答案: 如果是类型是没有办法弄清楚,如果返回的东西,止带,或…结束行的字符被丢弃,而不是返回字符串的一部分。 如果您真的很在意这些字符,那么您将无法通过。例如,您将必须一个一个地读取字符。

  • 首先,我看到有其他帖子也有这个问题,但没有人有和我一样的问题,即签名。verify()意外返回了false。 这是我的代码: 下面是我如何读入键(如果需要):

  • 问题内容: 我有这样的代码来使用读取文本文件: 它可以正常工作,但是Findbugs报告警告: NP_DEREFERENCE_OF_READLINE_VALUE:取消引用调用readLine()的结果,而不检查结果是否为null。如果没有更多的文本行要读取,则readLine()将返回null,并取消引用将生成一个null指针异常。 当我更改为时,即 该方法返回而该方法始终返回-实际上这是一个无限

  • 问题内容: 序言:我知道使用列表或其他集合来返回结果,但是随后我必须遍历列表以将结果取出:请参阅第二个示例 前言2:我正在寻找“ Java不支持…”之外的答案。 我正在寻找一种从Java方法调用返回多个对象的便捷方法。 有点像PHP: 我真的厌倦了在参数中传递持有者对象,例如: 然后: 如果有人想出一种优雅的方法来解决这个问题,那将非常有兴趣。 使用清单 这有两个缺点: 我必须先将清单装在房子的被

  • 问题内容: 我有一个自定义对话框,当我尝试获取EditText的值时,它返回null。 该行返回null 这是完整的代码。 问题答案: 尝试这个: 你必须告诉在哪个视图中找到ID。否则,它将尝试通过xml布局(通常在中声明)夸大视图中的ID。