Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 我的代码中的NullPointerException_Java_String - Fatal编程技术网

Java 我的代码中的NullPointerException

Java 我的代码中的NullPointerException,java,string,Java,String,我编写了以下代码,它打开了一个.txt文件并将其内容写入控制台,但它显示了一个NullPointerException,您能帮我调试一下吗 box = new JFileChooser(); returnVal = box.showOpenDialog(null); if (returnVal == box.APPROVE_OPTION) { File file = box.getSelectedFile(); } try { BufferedReader br = new B

我编写了以下代码,它打开了一个
.txt
文件并将其内容写入控制台,但它显示了一个
NullPointerException
,您能帮我调试一下吗

box = new JFileChooser();

returnVal = box.showOpenDialog(null);
if (returnVal == box.APPROVE_OPTION) {
    File file = box.getSelectedFile();
}
try {
    BufferedReader br = new BufferedReader(new FileReader(file));
    while (br.readLine() == null) {
        System.out.println(br.readLine());
    }
} catch (Exception e1) {
    e1.printStackTrace();
}

初始化的
文件
变量仅存在于if语句的范围内。您必须在try块中使用不同的
文件
变量,该变量可能未初始化(如果您没有在问题中未包含的代码中声明另一个
文件
变量,则代码无法通过编译)

改变

        if (returnVal == box.APPROVE_OPTION){
            File file = box.getSelectedFile();
        }


初始化的
文件
变量仅存在于if语句的范围内。您必须在try块中使用不同的
文件
变量,该变量可能未初始化(如果您没有在问题中未包含的代码中声明另一个
文件
变量,则代码无法通过编译)

改变

        if (returnVal == box.APPROVE_OPTION){
            File file = box.getSelectedFile();
        }


我认为这个代码有不止一个错误 查找更改1-5 变化1 变化2 变化3 变化4 变化5


我认为这个代码有不止一个错误 查找更改1-5 变化1 变化2 变化3 变化4 变化5


我觉得您还应该添加一个事实,即try-catch语句本身应该位于if语句中。@T-foll这是一个选项,但不必这样做。也许
文件
变量用于我们在这里看不到的其他地方,在这种情况下,它不应该在if语句中声明,只应该初始化。如果在If语句外声明,则try-catch可以保留在If语句外。这是真的,我没有这样想。nullPointerexeption此时不显示,但不会打印任何内容,也不会停止运行。我觉得您还应该添加一个事实,即try-catch语句本身,在if语句中。@T-foll这是一个选项,但不必这样做。也许
文件
变量用于我们在这里看不到的其他地方,在这种情况下,它不应该在if语句中声明,只应该初始化。如果在If语句外部声明,则try-catch可以保留在If语句外部。没错,我没有这样想。NullPointerExection此时不显示,但不会打印任何内容,也不会停止运行。
while(br.readLine()==null)
??不应该是<代码>!=null?@AJPerez正确,它也应该存储在变量中,否则将跳过一行,我已经添加了完整的答案:)可能重复
,而(br.readLine()==null)
??不应该是<代码>!=null?@AJPerez正确,它也应该存储在variable中,否则会跳过一行,我已经添加了完整的答案:)编辑的可能重复:现在有5个更改::我建议将变量名称从
文件更改为
selectedFile
,因为
文件
看起来会在其他地方使用和声明,这就是为什么您得到空值。更改4和更改5是最好的解决方案,然后它将不进行任何更改。还有一个问题:
BufferedReader
保持打开。编辑:现在5个更改::我建议将变量名从
file
更改为
selectedFile
,因为
file
看起来在其他地方被使用和声明,这就是为什么会得到空值。更改4和更改5是最好的解决方案,然后它会在没有任何更改的情况下工作。还有一个问题:
BufferedReader
保持打开状态。
box = new JFileChooser();
File selectedFile = null; // CHANGE 1

returnVal = box.showOpenDialog(null);
if (returnVal == box.APPROVE_OPTION) {
    selectedFile = box.getSelectedFile(); // CHANGE 2
}
try {
    BufferedReader br = new BufferedReader(new FileReader(selectedFile ));//CHANGE 5
    String line = "";
    while ((line=br.readLine()) != null) {//CHANGE 3
        System.out.println(line);//CHANGE 4
    }

    br.close();//@Tom comment:
} catch (Exception e1) {
    e1.printStackTrace();
}