Erro ao fechar PrintWriter = NullPointerException?

8 respostas
squall926

Bom Dia!!!

[color=blue]

[pre]

package com.config;

public class GravarOpcoes

{

PrintWriter output;

private Scanner input;
public void openFile()
	{
		try
		{
			
			PrintWriter output = new PrintWriter(new FileWriter(new File("c:/config.txt")));
			System.out.println("Arquivos de configuração ok! ");
			
		}
		catch(IOException ioexception)
		{
			System.out.println("Você não tem acesso de escrita ao arquivo. \n");
			System.exit(1);
		}
	}
	public void addConfig(ConfigRecord writer)
	{
		try
		{
			if(writer.getProxy())
			{
					output.format("%b\n %d\n %s", writer.getProxy(), writer.getIP(), writer.getPorta());
					
					System.out.println("Proxy: "+writer.getProxy()+"  Host: "+writer.getIP()
									+"  Porta: "+writer.getPorta());
			}
			else
			{
				    		output.format("%b\n %d\n %s", writer.getProxy(), writer.getIP(), writer.getPorta());
				
			}
		}
		catch(FormatterClosedException fce)
		{
			System.out.println(fce.getMessage());
		}
		catch(NoSuchElementException nsee)
		{
			System.out.println(nsee.getMessage());
		}
		try
		{
			output.close();//[/color][size=18][color=red]DA ERRO AQUI[/color][/size][color=blue]
		}
		catch(NullPointerException npe)
		{
			System.out.println("Erro: "+npe.getCause());
		}
	
	}[/color]

o codigo tem os devidos import’s…
esse codigo é parte de um Client de FTP.

Ao chamar o metodo addConfig(), mas precisamente na linha output.close(); se fechar o output no metodo openFile(), não gera o erro, porem não consigo passar dados pro arquivo. gera NullPointerException, não entendo o porque???
Tenho uma duvida. arquivo xml serve pra guardar configurações, e se sim é melhor que um txt basico???
Desde ja agradeço a ateção
Obrigado!!!

8 Respostas

H

Esta dando erro por que você esta criando dois arquivos output


PrintWriter output;

private Scanner input;

public void openFile()

{

try

{



PrintWriter output = new PrintWriter(new FileWriter(new File(c:/config.txt)));

coloque no primeiro
PrintWriter output = null;

e no segundo

output = new PrintWriter(new FileWriter(new File(“c:/config.txt”)));

squall926
package com.config;

import java.util.*;
import java.io.*;
import java.lang.SecurityException;
import java.util.Formatter;
import java.util.FormatterClosedException;
import java.io.FileNotFoundException;
import java.util.NoSuchElementException;
import com.config.ConfigRecord;

public class GravarOpcoes
{
    PrintWriter output = null;
    private Scanner input;
    	
    public void openFile()
    {
    	try
    	{
    	          output = new PrintWriter(new FileWriter(new File("c:/config.txt")));
    			
    	}
    	catch(IOException ioexception)
    	{
    		System.out.println("Você não tem acesso de escrita ao arquivo. \n");
    		System.exit(1);
    	}
    	}
    	public void addConfig(ConfigRecord writer)
    	{
    	try
    	{
    		if(writer.getProxy())
    	                {
    		          output.format("%b\n %d\n %s", writer.getProxy(), writer.getIP(), writer.getPorta());
    	                }
    	                else
    	                {
    		          output.format("%b\n %d\n %s", writer.getProxy(), writer.getIP(), writer.getPorta());
    	                }
    	}
    	catch(FormatterClosedException fce)
    	{
    		System.out.println(fce.getMessage());
    	}
    	catch(NoSuchElementException nsee)
    	{
    		System.out.println(nsee.getMessage());
    	}
    	catch(NullPointerException npe)
    	{
    		npe.getMessage();
    	}
    	try
    	{
    		output.close();
    	}
    	catch(NullPointerException npe)
    	{
    		System.out.println("Erro: "+npe.getCause());
    	}
    	
}

Pronto!!!
tenho que dizer que, suspeitava que o [code] servia pra isso mas por esta com pressa acabei não testando.
Voltando pro java, obrigado pela atenção, fiz as mudanças e continua dando NullPointerException, na verdade esse codigo era com [color=blue]File[/color] e não [color=blue]PrintWriter[/color], mudei pra PrintWriter pra conseguir formatar o conteudo que quero inserir no txt, ja que com [color=blue]File[/color] sempre que inseria "\n", não pulava linha... mas com [color=blue]File[/color] não tava dando NullPointException, funcionava certinho.......
Obrigado!!!

urubatan

só por curiosidade, tu chama o open file antes de chamar o add config certo?

squall926

Hum! não tinha feito esse teste…
vou tentar e post o resultado
chamo o metodo openFile() antes sim.
main uma vez Obrigado.

squall926

squall926:
Hum! não tinha feito esse teste…
vou tentar e post o resultado
chamo o metodo openFile() antes sim.
main uma vez Obrigado.

Ola ai…

output.format("%b %s %d", writer.getProxy(), writer.getIP(), writer.getPorta());
boolean, String, int

tava errado!
Mas eu esperava por um [color=red]FormatterClosedException[/color] e não NulPointerException…
aproveitando, alguem sabe porque o “\n” não ta quebrando linha no NotePad fica um quadrado preto no lugar da nova linha?

Obrigado mesmo pela atenção e paciência.
Ficarei satisfeito em poder ajudar na proxima!!!
valew!

I

Sugestão: use as tags codigos confesso que fiquei com preguiça de te ajudar não conseguia identificar o q era comentario o q era codigo o q era texto.

I

Velho,

Acabei de testar o seu codigo e o resultado foi SUCESSO mais tem um porem, retirei da classe os metodos que faziam parte de outra classe como os writer.getProxy(), writer.getIP(), writer.getPorta(). Então verifica esses metodos, porque são eles que estão causando erro na sua classe.
I

Por nada precisando é só postar.

Criado 21 de agosto de 2006
Ultima resposta 21 de ago. de 2006
Respostas 8
Participantes 4