2012-10-01 63 views
0

的我用兩個類,但我運行錯誤:的Java:編譯

Ç

諾姆:瑞吉

Idade:25

出現

異常在線程「 main「java.lang.NullPointerException at registrosarraylist03xmlteste.RegistrosArrayList03_xmlteste.cadastrar(R egistrosArrayList03_xmlteste.java:72) 在registrosarraylist03xmlteste.RegistrosArrayList03_xmlteste.main(RegistrosArrayList03_xmlteste.java:23) Java結果:1

而且lista.remove(p);不行

/* 
* ArrayList 
*/ 
package registrosarraylist03xmlteste; 

import com.thoughtworks.xstream.XStream; 
import java.io.File; 
import java.util.ArrayList; 
import java.util.Scanner; 

public class RegistrosArrayList03_xmlteste { 

    public static void main(String[] args) { 
     ArrayList listaPessoas = new ArrayList(); 

     // Menu 
     char op; 
     do { 
      op = menu(); 
      switch (op) { 
       case 'C': 
       case 'c': // cadastrar 
        cadastrar(listaPessoas); 
        gravarXML(listaPessoas, "teste.xml"); 
        break; 
       case 'L': 
       case 'l': // ler 
        lerXML("teste.xml"); 
        break; 
       case 'E': 
       case 'e': // editar 
        Scanner in = new Scanner(System.in); 
        MyPessoas p1 = new MyPessoas(); 
        System.out.print("Digite o ID: "); 
        p1.ID = in.nextInt(); 
        System.out.print("Novo nome: "); 
        p1.nome = in.next(); 
        System.out.print("Nova idade: "); 
        p1.idade = in.nextInt(); 
        editar(listaPessoas, p1); 
        gravarXML(listaPessoas, "teste.xml"); 
        listar(listaPessoas); 
        break; 
       case 'R': 
       case 'r': // remover 
        System.out.println("O comando Remover ainda nao esta pronto."); 
        break; 
       default: 
        System.out.println("Opcao invalida."); 
        break; 
      } 
     } while (op != 'S' && op != 's'); 
    } 

    static char menu() { 
     System.out.println("\n ### MENU ### Selecione uma opcao, digitando a primeira letra."); 
     System.out.println("Cadastrar Listar Editar Remover Sair"); 
     System.out.print("Opcao: "); 
     Scanner in = new Scanner(System.in); 
     return in.next().charAt(0); 
    } 

    static void cadastrar(ArrayList lista) { 
     Scanner in = new Scanner(System.in); 
     MyPessoas p = new MyPessoas(); 
     // ID gerado automaticamente. 
     System.out.print("Nome: "); 
     p.nome = in.nextLine(); 
     System.out.print("Idade: "); 
     p.idade = in.nextInt(); 
     System.out.print("Fone: "); 
     p.fone.fone=in.next(); 
     lista.add(p); 
    } 

    static void listar(ArrayList lista) { 
     System.out.println("ID - Nome - Idade"); 
     for (int i = 0; i < lista.size(); i++) { 
      // Obtem os dados da lista MyPessoas 
      MyPessoas p = (MyPessoas) lista.get(i); 
      System.out.println(p.ID + " - " + p.nome + " - " + p.idade); 
     } 
    } 

    static ArrayList lerXML(String filename) { 
     XStream xstream = new XStream(); 
     File arquivo = new File(filename); 
     ArrayList listaPessoas = (ArrayList) xstream.fromXML(arquivo); 
     listar(listaPessoas); 
     return listaPessoas; 
    } 

    static void gravarXML(ArrayList lista, String filename) { 
     XStream xstream = new XStream(); 
     String xml = xstream.toXML(lista); 
     GravarLer Gravar = new GravarLer(); 
     GravarLer.gravar(xml, filename); 
    } 

    static void editar(ArrayList lista, MyPessoas p1) { 
     System.out.print("Digite o nome: "); 
     for (int i = 0; i < lista.size(); i++) { 
      // Obtem os dados da lista MyPessoas 
      MyPessoas p = (MyPessoas) lista.get(i); 
      if (p.ID == p1.ID) { 
       p.nome = p1.nome; 
       p.idade = p1.idade; 
       break; 
      } 
     } 
    } 
// static void remover(ArrayList lista, MyPessoas p1) { 
//  // Obtem os dados da lista MyPessoas 
//  MyPessoas p = new MyPessoas(); 
//  System.out.print("Digite o ID: "); 
//  rmvID = in.nextInt(); 
//  lista.remove(p); 
// } 
} 



/* 
* Classe de MyPessoas 
*/ 
package registrosarraylist03xmlteste; 

public class MyPessoas { 

    public static int lastID = 1; 
    public int ID; 
    public String nome; 
    public int idade; 
    public Fone fone; 

    // Adiciona numeracao sequencial ao ID. 
    public MyPessoas() { 
     ID = MyPessoas.lastID++; 
    } 
} 



package registrosarraylist03xmlteste; 

public class Fone { 

    public String fone; 
} 



/* 
* Grava e Le registros em arquivos XML. 
*/ 
package registrosarraylist03xmlteste; 

import java.io.File; 
import java.io.FileWriter; 
import java.util.Scanner; 

public class GravarLer { 

    static void gravar(String xml, String filename) { 
     try { 
      FileWriter w = new FileWriter(filename); 
      w.write(xml); 
      w.flush(); 
      w.close(); 
     } catch (Exception e) { 
      System.out.println("Erro ao gravar XML: " + e); 
     } 
    } 

    static String ler(String filename) { 
     try { 
      Scanner in = new Scanner(new File(filename)); 
      StringBuilder sb = new StringBuilder(); 
      while (in.hasNext()) { 
       sb.append(in.next()); 
      } 
      in.close(); 
      return sb.toString(); 
     } catch (Exception e) { 
      System.out.println("Erro ao ler XML: " + e); 
     } 
     return ""; 
    } 

} 

回答

2

您必須初始化MyPessoas類中的Fone屬性。 在構造函數中添加:

fone = new Fone(); 

乍一看,這應該解決您的錯誤,但你可能需要進行其他的修正。

+0

非常感謝@Picarus –

0

這是一個運行時異常,而不是編譯錯誤。

讀取堆棧跟蹤。在IDE或編輯器中打開源代碼,打開行號顯示,然後轉到第72行。您可以在該行上取消引用空引用。找到它。