2012-09-13 1 views
-1

J'ai donc ce code:Exception dans le thread "principal" java.lang.NullPointerException cann't écrire à une classe

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(); 
    } 
} 

Et il me lance ceci:

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) 

Et Je n'ai aucune idée de comment résoudre cela. Quel est le problème ici?

+4

Ce qui est en ligne 68 Main.java? –

+0

Quelle est la définition de la classe 'record'? –

+1

Envisagez d'utiliser 'java.io.Console' au lieu de' Scanner'. – noahlz

Répondre

1

Le problème est dû au fait de l'appel à in.close() dans votre méthode de menu. Non seulement in.close() ferme l'objet Scanner, mais il arrive aussi à fermer System.in. Lorsque vous entrez 1 la sélection de menu de votre méthode est appelée recording() qui crée une nouvelle Scanner qui tente d'utiliser le System.in maintenant fermé.

Ceci est un article qui traite d'un problème similaire: Trying to write a method that checks user input in JAVA, getting NoSuchElementException

Questions connexes