Estou com problema no uso String[] .....java.lang.ArrayIndexOutOfBoundsException

3 respostas
P

Olá,

estou com um problema pois tinha dois metodos em um DAO e qdo chamava executava o primeiro
e o segundo dava o erro conforme topico http://www.guj.com.br/posts/reply/0/239397.java

o que fiz agora unifiquei em um só metodo mais agora tenho problema em jogar o 3 elemento no array

pois o primeiro sql gera dois campo em [0] e [1] e tento executar o sql e gera um elemento e coloco na
String de array como 3 elemento e me apresenta o erro…

se alguém puder me ajudar …

abs

String qtdeAluno = null;
		String nomeRelatorioJasper = "reportAluno";
		String nomeRelatorioSaida = "reportAluno" ;
		RelatorioUtil relatorioUtil = new RelatorioUtil();
		HashMap<String, String> parametrosRelatorio = new HashMap<String, String>();
		// busca o nome do instituto
        InstitutoRN irn = new InstitutoRN();
        
        Object[] in = irn.getNomeInstituto();
        if (in== null){
        	nome="Instituto não cadastrado";
        	qtdeAluno="";
        }else{
        	@SuppressWarnings("unused")
			BigInteger id= (BigInteger) in[0];
            nome= (String) in[1];
            qtdeAluno= (String) in[2]; 
        }
public Object[] getNomeInstituto() {

		Object[] instituto = null;
		String hql = "";
		BigInteger retorno = null;
		try {
			this.session.beginTransaction();
			hql = "SELECT * FROM instituto LIMIT 1";
			Query query = (Query) this.session.createSQLQuery(hql.toString());
			instituto = (Object[]) query.uniqueResult();
			
			hql = "select count(distinct(nm_aluno)) from resposta_aluno";
			query = (Query) this.session.createSQLQuery(hql);
			retorno = (BigInteger) query.uniqueResult();
			
			instituto[2]= retorno.toString();
			this.session.beginTransaction().commit();
		} catch (Exception e) {
			System.out.println("Erro: " + e);
		}
		return instituto;
	}
AVISO: /restrito/reportAluno.xhtml @26,62 value="#{reportAluno.arquivoRetorno}": Error reading 'arquivoRetorno' on type ao.com.avalia.web.ReportAluno
javax.el.ELException: /restrito/reportAluno.xhtml @26,62 value="#{reportAluno.arquivoRetorno}": Error reading 'arquivoRetorno' on type ao.com.avalia.web.ReportAluno
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111)
	at org.primefaces.component.filedownload.FileDownloadActionListener.processAction(FileDownloadActionListener.java:50)
	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:84)
	at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:773)
	at javax.faces.component.UICommand.broadcast(UICommand.java:296)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 2
	at ao.com.avalia.web.ReportAluno.getArquivoRetorno(ReportAluno.java:78)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
	at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
	at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:71)
	at org.apache.el.parser.AstValue.getValue(AstValue.java:123)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:106)
	... 22 more
19/04/2011 20:50:57 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet FacesServlet threw exception
java.lang.ArrayIndexOutOfBoundsException: 2
	at ao.com.avalia.web.ReportAluno.getArquivoRetorno(ReportAluno.java:78)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
	at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
	at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:71)
	at org.apache.el.parser.AstValue.getValue(AstValue.java:123)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:106)
	at org.primefaces.component.filedownload.FileDownloadActionListener.processAction(FileDownloadActionListener.java:50)
	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:84)
	at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:773)
	at javax.faces.component.UICommand.broadcast(UICommand.java:296)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:662)

3 Respostas

brunobuild

Cara seguinte,

Você precisa ver qual é o tamanho do array instituto.
se quando você executa a query, ele retorna um array de que tamanho?
Se for de tamanho 2 você não vai conseguir colocar o retorno.tostring dentro do instituto[2], porque o array só tem 2 posições, quando você faz instituto[2] você quer atribuir um valor para a terceira posição do array, o array não é dinamico, você precisa criar ele do tamanho que você vai usar exatamente, se não não rola.

instituto = (Object[]) query.uniqueResult();  
instituto[2]= retorno.toString();

Você teria que fazer alguma coisa assim:

Object[] object = new Object[3];
object[0] = instituto[0];
object[1] = instituto[1];
object[2] = retorno.toString();
P

solução criei um novo array com 3 elementos e joguei o array de 2 elementos e o retorno da segundo metodo
no novo.

abs

public Object[] getNomeInstituto() {

		Object[] instituto = null;
		String hql = "";
		BigInteger qtdeAluno = null;
		Object[] ret = new Object[3];
		try {
			this.session.beginTransaction();
			hql = "SELECT * FROM instituto LIMIT 1";
			Query query = (Query) this.session.createSQLQuery(hql.toString());
			instituto = (Object[]) query.uniqueResult();
			
			hql = "select count(distinct(nm_aluno)) from resposta_aluno";
			query = (Query) this.session.createSQLQuery(hql);
			qtdeAluno = (BigInteger) query.uniqueResult();
			
			ret[0]= instituto[0];
			ret[1]= instituto[1];
			ret[2]= qtdeAluno.toString();
			this.session.beginTransaction().commit();
		} catch (Exception e) {
			System.out.println("Erro: " + e);
		}
		return ret;
	}
brunobuild

Foi o que eu disse!! coloca como [RESOLVIDO]

Criado 19 de abril de 2011
Ultima resposta 19 de abr. de 2011
Respostas 3
Participantes 2