-1

だから私はこのコードを持っています:

package Firstpack;

import java.io.*;
import java.util.*;

public class Main {

    public static void menu() {
        System.out.println("Welcome");
        System.out.println("1. Add a record ");
        System.out.println("2. See all records ");
        System.out.println("3. See a category");
        System.out.println("4. Total spend(Year)");
        System.out.println("5. Spend in a month");
        System.out.println("6. Chose by index");
        System.out.println("7. Exit ");

        System.out.print(">");
        Scanner in = new Scanner(System.in);
        int enteredInt = in.nextInt();
        in.close();

        switch (enteredInt) {
        case 1:
            recording();
            break;
        case 2:
            System.out.print(" You have chosen -> See all records");
            break;
        case 3:
            System.out.print(" You have chosen -> See a category");
            break;
        case 4:
            System.out.print(" You have chosen -> Total spend(Year)");
            break;
        case 5:
            System.out.print(" You have chosen -> Spend in a month");
            break;
        case 6:
            System.out.print(" You have chosen -> Chose by index");
            break;
        case 7:
            System.out.print(" Bye! ");
            break;
        default:
            menu();
        }

    }

    public static void recording() {
        System.out.println(" You have chosen -> Add a record");

        record rec = new record();
        Scanner in = new Scanner(System.in);

        System.out.print("Enter Amount > ");
        rec.amount = in.nextDouble();
        System.out.print("Enter Category > ");
        rec.category = in.next();
        System.out.print("Enter Details > ");
        rec.details = in.next();

        try {
            FileWriter fw = new FileWriter("findme.txt");
            BufferedWriter bw = new BufferedWriter(fw);

            bw.write(String.valueOf(rec.amount));
            bw.write(rec.category);
            bw.write(rec.details);

            bw.close();
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        menu();
    }
}

そして、それは私にこれを投げます:

Exception in thread "main" java.lang.NullPointerException
    at java.io.Writer.write(Unknown Source)
    at Firstpack.Main.recording(Main.java:68)
    at Firstpack.Main.menu(Main.java:25)
    at Firstpack.Main.main(Main.java:82)

そして、これを解決する方法がわかりません。ここで何が問題なのですか?

4

1 に答える 1

1

問題はin.close()、メニュー メソッドでの呼び出しが原因です。in.close()はオブジェクトを閉じるだけでなくScanner、たまたま閉じSystem.inます。メニュー選択として 1 を入力すると、現在閉じられている を使用しようとするrecording()new を作成するメソッドが呼び出されます。ScannerSystem.in

これは、同様の問題に対処する投稿です: JAVA でユーザー入力をチェックするメソッドを作成しようとして、NoSuchElementException を取得する

于 2012-09-13T18:22:57.043 に答える