Problema com tratamento de arquivo

2 respostas
G

Olá Pessoal, estou com o seguinte problema.
Fiz uma coisinha simples que cadastra clientes criando arquivos de texto com o nome dos clientes e dentro do arquivo, as informações sobre ele.
O problema está na minha busca por clientes, quando eu clico para buscar clientes, o programinha abre uma popup que pede o nome do cliente a ser procurado.
Tambem criei uma janela BuscaPessoaFisica que recebe como parametro uma String, que por sua vez é o nome passado na popup. Essa classe BuscaPessoaFisica(String nome) tem um construtor que recebe a String nome(passado na popup) e abre o arquivo com o nome passado. Essa janela BuscaPessoaFisica tem um jLabel que eu quero que vire o nome do cliente e tem uma jTextArea que eu quero que vire a “leitura” do arquivo.
Mas eu não sei porque diabos da exceção ;/
Código da popup:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    File search = new File(jTextField1.getText()+".txt");
    if(search.exists()){
        BuscaPessoaFisica bpf = new BuscaPessoaFisica(jTextField1.getText());
        bpf.setVisible(true);
        this.setVisible(false);
        
    }else{
        this.jLabel1.setText("Cliente não cadastrado.");
    }
}

e a da classe BuscaPessoaFisica:

BuscaPessoaFisica(String nome) {
        try {
        BufferedReader in = new BufferedReader(new FileReader(nome + ".txt"));
        String str;
        while((str = in.readLine()) != null){
           str = str + in.readLine();
        }
        jLabel2.setText(nome);
        jTextArea1.setText(str);
        jTextArea1.setEditable(false);
        in.close();
        
    } 
    catch (IOException e){
        e.printStackTrace();
    }
        
    }

e as exceptions:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at BuscaPessoaFisica.<init>(BuscaPessoaFisica.java:34)
	at PopUpBuscaPF.jButton1ActionPerformed(PopUpBuscaPF.java:95)
	at PopUpBuscaPF.access$100(PopUpBuscaPF.java:18)
	at PopUpBuscaPF$2.actionPerformed(PopUpBuscaPF.java:52)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6504)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
	at java.awt.Component.processEvent(Component.java:6269)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4860)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4686)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2713)
	at java.awt.Component.dispatchEvent(Component.java:4686)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
	at java.awt.EventQueue.access$000(EventQueue.java:101)
	at java.awt.EventQueue$3.run(EventQueue.java:666)
	at java.awt.EventQueue$3.run(EventQueue.java:664)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:680)
	at java.awt.EventQueue$4.run(EventQueue.java:678)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Ja agradeço a todos que puderem me dar uma luz
Abração a todos!

2 Respostas

nel

Oi!

Não vou nem olhar muito seu código, mas seu problema está aqui:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException   
    at BuscaPessoaFisica.<init>(BuscaPessoaFisica.java:34)

Isso é o mesmo que:

String s = null; s.trim();

Uma referência nula executando alguma ação.

ViniGodoy

O método BuscaPessoaFisica está uma viagem. Ele usa a variável str para duas coisas diferentes: ler a linha atual e a acumular o texto de saída.
Não faça concatenações dentro de whiles, pois a performance de concatenação de Strings é extremamente baixa (Strings são imutáveis).

Além disso, desde o Java 5 já existe a classe Scanner, que evita um código tão rebuscado.

BuscaPessoaFisica(String nome) { Scanner in; try { in = new Scanner(new File(nome + ".txt")); while (in.hasNextLine()) { jTextArea1.append(in.nextLine()); } jTextArea1.setEditable(false); jLabel2.setText(nome); } catch (IOException e){ throw new RuntimeException(e); } finally { try { if (in != null) in.close(); } catch (Exception e) {} } }

Se estiver usando o Java 7, pode evitar tantos trys:

BuscaPessoaFisica(String nome) { try (Scanner in = new Scanner(new File(nome + ".txt")) { while (in.hasNextLine()) { jTextArea1.append(in.nextLine()); } jTextArea1.setEditable(false); jLabel2.setText(nome); } catch (IOException e){ throw new RuntimeException(e); } }

Outra coisa. O BuscaPessoaFisica é um construtor. Portanto, talvez o JTextArea e o JLabel ainda nem sequer estejam criados quando esse método é chamado. Verifique isso.

Criado 9 de setembro de 2011
Ultima resposta 9 de set. de 2011
Respostas 2
Participantes 3