使用isEmpty()方法时获取Null Pointer Exception

use*_*210 8 java login nullpointerexception

我正在尝试为我的程序实现一个登录功能,但它返回一个空指针异常.我知道当你在内存中提到一个里面没有任何内容的地方时会发生这种情况,但据我所知,我已经正确地实例化了所有对象 - 如果我错了请纠正我!

我正在尝试实现添加用户功能:我有一个用户名和密码列表,我有一个现有的方法,它读取该文件并将其存储在一个数组中.我想写一个新的登录列表,所以我写了一个新的方法,将这个数组转换为ArrayList,并最终写入一个新的登录,然后再次写入登录文件.问题是我得到了空指针异常.

方法1:

public String[] readFile(){
    ArrayList<String> dataList = new ArrayList<String>();
    String Line;
    try {
        String line = br.readLine();
        do {                
            dataList.add(Line);
            line = br.readLine();
        }
        while (!line.isEmpty());
        br.close ();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    String[] dataArr = new String[dataList.size()];
    dataArr = dataList.toArray(dataArr);

    return dataArr; // Returns an array containing the separate lines of the file
}
Run Code Online (Sandbox Code Playgroud)

方法2:

public void addNewUser (String username, String password){
    String[] dataArr = readFile();  // Read in the list of profiles and store it in an array
    ArrayList<String> dataAL = new ArrayList<String>(Arrays.asList(dataArr));   // store array of profiles as ArrayList
    dataAL.add(username + "\t" + password);

}
Run Code Online (Sandbox Code Playgroud)

Ara*_*ram 24

你可能在这里得到空指针

while (!line.isEmpty());
Run Code Online (Sandbox Code Playgroud)

改为

while(line!=null && !line.isEmpty())
Run Code Online (Sandbox Code Playgroud)

如果你注意了异常的堆栈跟踪,你应该看到引发异常的确切行

  • 只是为了向 @user1058210 解释一下,这将解决问题,因为如果表达式 `(bool &amp;&amp; bool2)` 的左侧为 false,则不会评估右侧。因此,如果“line”为“null”,则“!line.isEmpty()”将不会被执行。 (2认同)