在java can';我看不出是什么';开关怎么了

在java can';我看不出是什么';开关怎么了,java,nullpointerexception,switch-statement,Java,Nullpointerexception,Switch Statement,我得到了一段简单的代码,它调用另一个类中返回字符串值的方法。我的程序一直到showinput框,我输入搜索词,然后愚蠢的空指针在我脸上到处都是。我在这里发号施令,不知道该怎么办。这是第三个案例,我快死了。我得到的只是java.lang.nullpointerexeption String s = JOptionPane.showInputDialog( menu); try { int i = Integer.parseInt(s);

我得到了一段简单的代码,它调用另一个类中返回字符串值的方法。我的程序一直到showinput框,我输入搜索词,然后愚蠢的空指针在我脸上到处都是。我在这里发号施令,不知道该怎么办。这是第三个案例,我快死了。我得到的只是java.lang.nullpointerexeption

String s = JOptionPane.showInputDialog( menu);
        try
        {  
            int i = Integer.parseInt(s);

        switch(i)
            {
                case 1:
                    f = new BasicFile();
              FileOpen = true;
              //BasicFile.Backup(f);

                display(f.getContents());
                break;

                case 2:
           if (FileOpen == true){
                    display(f.getLines(), (f.getWords() - f.getNumber()), f.getChars(), f.getNumber());
              }
              else
              display("Must open file first", "ERROR");
                break;

           case 3:
                    if (FileOpen == true){
              String key = input();
                    display(f.Search(key));
              }
              else
              display("Must open file first", "ERROR");
                break;

                case 4:
                    done = true;
                break;


                default:
                    display("This option is underfined", "Error");
                break;
            }
       }
       catch(NumberFormatException | NullPointerException | IOException e)
       {
            display(e.toString(), "Error");
       }
    }

空引用有四种可能

 1. FileOpen - might be null
 2. input() - might throw null
 3. f - might be null
 4. display() - might throw null

一步一步地检查抛出npe的是什么,您可以在调试器中简单地执行此操作。

无论何时获得npe,您都需要仔细研究抛出npe的行。那是哪一行呢?在使用f之前,您是否先检查f是否为空?您是否介意先注释一下您的try catch块,然后与我们共享它将生成的堆栈跟踪?
f
case:1
中设置,但在
case:3
中使用-是否为
null
?注意:编写代码时请使用;方法应该在
较低的CAME
-尤其是因为不这样做会破坏so的语法hilighting。@BoristheSpider让我们在推测之前等待stacktrace…所有案例都检查文件是在案例1上设置的还是没有执行。但我不能注释try-catch块,编译器向我抛出了无数io实例。因为另一个类中的方法正在抛出它们。