0

私は2つのクラスを使用していますが、私は実行しています:

C

名前:レジス

イダデ:25

現れる

registrosarraylist03xmlteste.RegistrosArrayList03_xmlteste.main(RegistrosArrayList03_xmlteste.java:23) の registrosarraylist03xmlteste.RegistrosArrayList03_xmlteste.cadastrar(RegistrosArrayList03_xmlteste.java:72) でのスレッド「メイン」java.lang.NullPointerException での例外 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 "";
    }

}
4

2 に答える 2

2

MyPessoas クラスで Fone 属性を初期化する必要があります。コンストラクターで次を追加します。

fone = new Fone();

一見すると、これでエラーが解決するはずですが、他の修正が必要になる場合があります。

于 2012-10-01T00:46:33.143 に答える
0

これは実行時例外であり、コンパイル エラーではありません。

スタック トレースを読み取ります。ソース コードを IDE またはエディターで開き、行番号表示をオンにして、72 行目に移動します。その行で null 参照を逆参照します。それを見つける。

于 2012-10-01T00:38:38.917 に答える