[RESOLVIDO ]Exceção em JFileChooser

Boa noite estou fazendo um programa que precisa usar o componente JFileChooser, consigo fazer ele funcionar normalmente o problema é quando resolvo apertar o botão “Cancel” a seguinte exceção aparece.
Como resolvo este problema? Não sei “dizer” ao programa o que deve acontecer quando o botão for apertado.
Colocarei o trecho do código que faço o JFileChooser aparecer.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { jFileChooser1.showOpenDialog(this);// Torna visível o FileChooser. this.jTextArea1.setText(null);// Limpa o componente jTextArea1. String caminho = jFileChooser1.getSelectedFile().getAbsolutePath();// Encontra o caminho completo do arquivo selecionado. String linha; try { File arquivo = new File(caminho); FileReader reader = new FileReader(arquivo); BufferedReader leitor = new BufferedReader(reader); if (arquivo.exists() && arquivo.canRead() && arquivo.isFile()) {//Testa se o arquivo existe, se pode ser lido e se é um arquivo. do { linha = leitor.readLine();//Pega uma linha do arquivo. if (linha != null) { this.jTextArea1.append(linha);//Coloca no componente jTextArea1 a linha pega no arquivo lido. this.jTextArea1.append("\n"); } } while (linha != null); leitor.close(); reader.close(); } } catch (FileNotFoundException ex) { JOptionPane.showMessageDialog(this, "Arquivo não encontrado.", "Erro", JOptionPane.ERROR_MESSAGE); } catch (IOException ex) { JOptionPane.showMessageDialog(this, "Erro no arquivo.", "Erro", JOptionPane.ERROR_MESSAGE); } }

Abaixo exceção:

[quote]Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at pacote.Janela.jButton1ActionPerformed(Janela.java:151)
at pacote.Janela.access$100(Janela.java:22)
at pacote.Janela$2.actionPerformed(Janela.java:74)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253)
at java.awt.Component.processMouseEvent(Component.java:6203)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:5968)
at java.awt.Container.processEvent(Container.java:2105)
at java.awt.Component.dispatchEventImpl(Component.java:4564)
at java.awt.Container.dispatchEventImpl(Container.java:2163)
at java.awt.Component.dispatchEvent(Component.java:4390)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4125)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)
at java.awt.Container.dispatchEventImpl(Container.java:2149)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4390)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:649)
at java.awt.EventQueue.access$000(EventQueue.java:96)
at java.awt.EventQueue$1.run(EventQueue.java:608)
at java.awt.EventQueue$1.run(EventQueue.java:606)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:116)
at java.awt.EventQueue$2.run(EventQueue.java:622)
at java.awt.EventQueue$2.run(EventQueue.java:620)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:619)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
CONSTRUÍDO COM SUCESSO (tempo total: 4 minutos 0 segundos)[/quote]

Obrigado.

To com preguiça… :frowning:

Tenta isso ai:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
           jFileChooser1.showOpenDialog(this);// Torna visível o FileChooser.  
           this.jTextArea1.setText(null);// Limpa o componente jTextArea1.  
           String caminho = jFileChooser1.getSelectedFile().getAbsolutePath();// Encontra o caminho completo do arquivo selecionado.  
           String linha;  
           try {  
               File arquivo = new File(caminho);  
               FileReader reader = new FileReader(arquivo);  
               BufferedReader leitor = new BufferedReader(reader);  
               if (arquivo.exists() && arquivo.canRead() && arquivo.isFile()) {//Testa se o arquivo existe, se pode ser lido e se é um arquivo.  
                   do {  
                       linha = leitor.readLine();//Pega uma linha do arquivo.  
                       if (linha != null) {  
                           this.jTextArea1.append(linha);//Coloca no componente jTextArea1 a linha pega no arquivo lido.  
                           this.jTextArea1.append("\n");  
                       }  
                   } while (linha != null);  
                   leitor.close();  
                   reader.close();  
               }  
           } catch( NullPointerException npE ) {
               return;
           } catch (FileNotFoundException ex) {  
               JOptionPane.showMessageDialog(this, "Arquivo não encontrado.", "Erro", JOptionPane.ERROR_MESSAGE);  
           } catch (IOException ex) {  
               JOptionPane.showMessageDialog(this, "Erro no arquivo.", "Erro", JOptionPane.ERROR_MESSAGE);  
           }  
       }   

Eu só fiz acrescentar isso no seu código:

} catch( NullPointerException npE ) {
               return;

Obrigado lucas, funcionou parcialmente, aconteceu o seguinte agora.
Se eu executo o programa, abro o jFileChooser pela pimeira vez e aperto cancelar sem escolher nada, aparece a mesma mensagem de exceção.
Se eu executo o programa, abro o jFileChooser não sendo pela primeira vez, ou seja antes abri ele e escolhi um texto e agora abri denovo e apertei “Cancel” direto, não aparece nada.

[quote=robgeek]Obrigado lucas, funcionou parcialmente, aconteceu o seguinte agora.
Se eu executo o programa, abro o jFileChooser pela pimeira vez e aperto cancelar sem escolher nada, aparece a mesma mensagem de exceção.
Se eu executo o programa, abro o jFileChooser não sendo pela primeira vez, ou seja antes abri ele e escolhi um texto e agora abri denovo e apertei “Cancel” direto, não aparece nada.[/quote]

Talvez seu try não esteja abrangendo aonde a exceção é lançada. Faça isso:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
               try {                                           
                   jFileChooser1.showOpenDialog(this);// Torna visível o FileChooser.    
                   this.jTextArea1.setText(null);// Limpa o componente jTextArea1.    
                   String caminho = jFileChooser1.getSelectedFile().getAbsolutePath();// Encontra o caminho completo do arquivo selecionado.    
                   String linha;   
                   File arquivo = new File(caminho);    
                   FileReader reader = new FileReader(arquivo);    
                   BufferedReader leitor = new BufferedReader(reader);    
                   if (arquivo.exists() && arquivo.canRead() && arquivo.isFile()) {//Testa se o arquivo existe, se pode ser lido e se é um arquivo.    
                       do {    
                           linha = leitor.readLine();//Pega uma linha do arquivo.    
                           if (linha != null) {    
                               this.jTextArea1.append(linha);//Coloca no componente jTextArea1 a linha pega no arquivo lido.    
                               this.jTextArea1.append("\n");    
                           }    
                       } while (linha != null);    
                       leitor.close();    
                       reader.close();    
                   }    
               } catch( NullPointerException npE ) {  
                   return;  
               } catch (FileNotFoundException ex) {    
                   JOptionPane.showMessageDialog(this, "Arquivo não encontrado.", "Erro", JOptionPane.ERROR_MESSAGE);    
               } catch (IOException ex) {    
                   JOptionPane.showMessageDialog(this, "Erro no arquivo.", "Erro", JOptionPane.ERROR_MESSAGE);    
               }    
}     

Eu só fiz colocar o código todo agora dentro do try. Só que você tem que verificar o seguinte. Vamos dizer, para passar rápido por esse problema que você está tendo pode-se fazer isso. Agora para ser correto e seguro. Você deve tratar o NullPointerException por código sem trycatch. Provavelmente com um controle.

Que isso, cara… Não se faz essas coisas.
Não se faz um catch por NullPointerException a não ser que tenha um motivo muito bom mesmo, e tratar Exception por preguiça é inaceitável.

robgeek, poste a linha 151 da classe Janela.java, assim a gente consegue identificar a causa real do problema.

Que isso, cara… Não se faz essas coisas.
Não se faz um catch por NullPointerException a não ser que tenha um motivo muito bom mesmo, e tratar Exception por preguiça é inaceitável.

robgeek, poste a linha 151 da classe Janela.java, assim a gente consegue identificar a causa real do problema.[/quote]

Enquanto você estava postando eu estava modificando o meu post. Olha o que eu falei para ele.

Você o recomenda tratar o NullPointerException através de controle if( caminhoAbsoluto == null )? Eu pensei em dar essa sugestão a ele também, mas não tinha certeza.

Ele tem que prever o fluxo do método dele, as possibilidades de erro, se existe a possibilidade de alguma variável estar nula, e se isso for causar algum problema, como está acontecendo aqui, eu sugiro que verifique se está nulo com um if.

Que não se deve fazer com preguiça eu sei. Tava morrendo de sono e tentei ajuda-lo só para conseguir resolver o problema rápido, porém, eu iria falar exatamente o que falei no post que eu editei. Vou tentar colocar outra solução para ele, SEM PREGUIÇA… :smiley: Sem preguiça também sugiro por if. Obrigado pela chamada de atenção, as vezes a gente pode querer ajudar a pessoa rapidinho assim e pode terminar confundindo-a e ensinando errado. Peço Desculpas a ele. :lol:

Opa, sem problemas. Só espero que o autor do tópico leia isso depois. :smiley:

Idem.

Aqui está a solução que acredito ser correta para seu problema.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {  
    try {                                             
        int yes = jFileChooser1.showOpenDialog(this);// Torna visível o FileChooser.      
        if( yes == JFileChooser.APPROVE_OPTION ) {
            this.jTextArea1.setText(null);// Limpa o componente jTextArea1.      
            String caminho = jFileChooser1.getSelectedFile().getAbsolutePath();// Encontra o caminho completo do arquivo selecionado.      
            String linha;     
            File arquivo = new File(caminho);      
            FileReader reader = new FileReader(arquivo);      
            BufferedReader leitor = new BufferedReader(reader);      
            if (arquivo.exists() && arquivo.canRead() && arquivo.isFile()) {//Testa se o arquivo existe, se pode ser lido e se é um arquivo.      
                while ( ( linha = leitor.readLine() ) != null ) {          
                    this.jTextArea1.append(linha);//Coloca no componente jTextArea1 a linha pega no arquivo lido.          
                    this.jTextArea1.append("\n");          
                }
            } // fim do if Interno
        } // fim do if Externo
        else {
            return;
        } 
    } catch (FileNotFoundException ex) {      
        JOptionPane.showMessageDialog(this, "Arquivo não encontrado.", "Erro", JOptionPane.ERROR_MESSAGE);      
    } catch (IOException ex) {      
        JOptionPane.showMessageDialog(this, "Erro no arquivo.", "Erro", JOptionPane.ERROR_MESSAGE);      
    }      
}

Pronto. Tente este código.

Boa noite pessoal, cheguei agora, vou falar a verdade, só olhei por cima as respostas dei um Copy Pasta no código do último post e compilei. Deu tudo certo, funcionou perfeitamente. Vou no mercado agora e depois que chegar verei direito o código e os post de vocês.

Muito obrigado a todos que tentaram me ajudar.

[quote=robgeek]Boa noite pessoal, cheguei agora, vou falar a verdade, só olhei por cima as respostas dei um Copy Pasta no código do último post e compilei. Deu tudo certo, funcionou perfeitamente. Vou no mercado agora e depois que chegar verei direito o código e os post de vocês.

Muito obrigado a todos que tentaram me ajudar.[/quote]

Ok. Mas não esquece de ver os post com calma por favor. De nada.