NullPointerException no Jasper, não sei porque

11 respostas
evertonsilvagomesjav

Alguem me fala da onde tem um objeto null que nao consigui achar, ja debuguei ja vi os valores das variaveis e até agora nao descobri qual é o maldito que ta me lançando esse npe.

String path =  "C:\CVM\Produtos\TPC_VIEW\WebContent\Relatorios\relatorio_tpc.jasper";
						System.out.println(path); // ta com o caminho ok, e o arquivo esta la 
						System.out.println( Teste.this.getSource()); // imprime o toString() do objeto
						
						JasperPrint print = JasperFillManager.fillReport(path, new HashMap(), NULL AQUI.
																	  Teste.this.getSource());

11 Respostas

BrunoBastosPJ

JasperFillManager

evertonsilvagomesjav

ueh mas nullPointer onde?

evertonsilvagomesjav

Alguem sabe pq o null?

Fazendo os teste nada acusa o nullPointer:

InputStream path =  Teste.this.getClass().getResourceAsStream("\Relatorios\a.jasper");
						String caminho = "C:\CVM\Produtos\TesteSwing\src\Relatorios\a.jasper"	;
						System.out.println(caminho);
						System.out.println(path); // imprime ok o toString								
					    System.out.println(Teste.this.getSource());
						
						//JasperReport relatorio = JasperCompileManager.compileReport("C:\CVM\Produtos\TesteSwing\src\Relatorios\a.jrxml");   

																					
						JasperPrint print = JasperFillManager.fillReport(path, new HashMap(), // aqui me gera null nao sei da onde
																	  Teste.this.getSource());
						
						JasperViewer.viewReport(print,true);
evertonsilvagomesjav

aqui ta o método getSource que estou testando, e ele seria usado para preencher o relatorio

public JRDataSource getSource(){
		
		List<Cliente> cliente = new ArrayList<Cliente>();
		
		Cliente c = new Cliente(1,"everton");
		
		cliente.add(c);
		
		c = new Cliente(2,"pedro");
		
		cliente.add(c);
		
		JRDataSource source = new JRBeanCollectionDataSource(cliente);
		
		return source;
		
		
	}
davidbuzatto

É assim:

InputStream is = getClass().getResourceAsStream( "/Relatorios/a.jasper" );

Cuidado que o nome do pacote e do arquivo são case sensitive quando estão dentro do .jar

Ah, e tire esse monte de Teste.this.algumMétodo.
Se você está na classe chame o método diretamente, ou então this.algumMétodo se vc acha que fica mais claro.

[]´s

juliocesarss

Olha eu uso esse código pra gerar o relário. Não sei onde esta o seu erro mas talvez isso ajude :

try{
            Connection con = bd.getConnection();// sua Conexão
            HashMap parametros = new HashMap();//parametros
            parametros.put("USER", "teste");//parametros
            JasperPrint  jp = JasperFillManager.fillReport("./jasper/relatorio_final.jasper", parametros, con);//JasperPrint com 3 parametros, caminho do relatorio, parametros, e a conexão
            JasperViewer jrv = new JasperViewer(jp,false); // O JasperViewer com o JasperPrint como Parametro
            jrv.setVisible(true);// E a visualização
        }catch(Exception e){
            e.printStackTrace();
        }

Se fizer tudo certinho não tem como dar erro.

evertonsilvagomesjav

davidbuzatto:
É assim:

InputStream is = getClass().getResourceAsStream( "/Relatorios/a.jasper" );

Cuidado que o nome do pacote e do arquivo é case sensitive quando estão dentro do .jar

Ah, e tire esse monte de Teste.this.algumMétodo.
Se você está na classe chame o método diretamente, ou então this.algumMétodo se vc acha que fica mais claro.

[]´s

rsrs esses Teste.this é pq estou na classe local de método, no evento de um botao.

J
evertonsilvagomesjava:
Alguem sabe pq o null?

Fazendo os teste nada acusa o nullPointer:

InputStream path =  Teste.this.getClass().getResourceAsStream("\Relatorios\a.jasper");
						String caminho = "C:\CVM\Produtos\TesteSwing\src\Relatorios\a.jasper"	;
						System.out.println(caminho);
						System.out.println(path); // imprime ok o toString								
					    System.out.println(Teste.this.getSource());
						
						//JasperReport relatorio = JasperCompileManager.compileReport("C:\CVM\Produtos\TesteSwing\src\Relatorios\a.jrxml");   

																					
						JasperPrint print = JasperFillManager.fillReport(path, new HashMap(), // aqui me gera null nao sei da onde
																	  Teste.this.getSource());
						
						JasperViewer.viewReport(print,true);

Você não precisa colocar '\\' na InputStream. Creio que seja isso que esteja dando null.
Tente fazer assim

InputStream IMAGEM_INICIO = getClass().getResourceAsStream("/br/com/sistemaX/imagens/Relatorio.png");
No seu caso vc irá apontar pra onde está seu relatório. Coloque o seu relatório dentro de um pacote no seu projeto e faça como mostrado acima.
evertonsilvagomesjav

nussa consegui resolver, era problema de versão do ireport + jasper. Vlw a todos

Priuli

Tá ai uma coisa que eu NÃO gosto do jasper, a compatibilidade de versões, é como se fosse cada versão um novo sistema. compatibilidade com versão anterior praticamente não existe!!!

Hadamanthys

Estou com o mesmo problema, estou usando o iReport 4.5 e criei o arquivo jasper também com a mesma versão.

Toda hora acontece NullPointException.

Segue meu código.

package br.com.sein.relatorio;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;


public class GerarRelatorio extends HttpServlet{
		
		private final static long serialVersionUID = 1L;
		
	
		
		protected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
			
		
			
			String cod = request.getParameter("imprimir_analise");        
		
			
//		
			//ServletContext contex = this.getServletContext();
//			
//			String nomeDoArquivoCopilado = contex.getRealPath(nomeDoRelatorio);
			
			ServletContext context = this.getServletConfig().getServletContext();
			
			File jasper = new File( context.getRealPath("WebContent/Relatorios/Sca-version7.jasper"));
		
		try{
		
			
			JasperReport relatorioCompilado = (JasperReport)JRLoader.loadObject(jasper);
					
					//JRLoader.loadObject(arquivo);
			
			Map<String, String> parametros = new HashMap<String, String>();
			
			
			parametros.put("parametro", cod);
					  
		    
		    
		    JasperPrint relatorioFinal = JasperFillManager.fillReport(relatorioCompilado, parametros);
		    
		    response.setContentType("application/pdf;charset=UTF-8");
		    
		    //Adequado para se enviar dados binários para o browser.
		    ServletOutputStream out = response.getOutputStream();
		
		    JasperExportManager.exportReportToPdfStream(relatorioFinal,out);
		    out.flush();
		
		}catch(IOException e){
			response.setContentType("text/plain");
			PrintWriter printWriter = response.getWriter();
			e.printStackTrace(printWriter);
			throw new ServletException(e);
		} catch (JRException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		}
}
Criado 10 de novembro de 2010
Ultima resposta 16 de fev. de 2012
Respostas 11
Participantes 7