Glauciney 0 Denunciar post Postado Agosto 31, 2010 Bom dia, Pessoal sou novo por aqui e não sei se estou postando isso no local certo. Estou com um problema em uma aplicação que estou desenv. para celular. Ela comunica com o banco de dados corretamente no caso estou usando o Postgre, ela busca os registros corretamente sendo byte a byte. Após realizar essa leitura no banco tenho que jogar esses campos lidos na tela do meu celular, já criei o banco na web, coloquei os arquivos (*.jsp). Ao executar o projeto ele me retorna a mensagem final "Uncaught exception: java.lang.OutOfMemoryError (stack trace incomplete)". Sinceramente não sei o que pode estar acontecendo abaixo está o código que me faz possivel essa execução. import java.io.*; import java.util.Vector; import javax.microedition.io.Connector; import javax.microedition.io.HttpConnection; public class acessoWeb implements Runnable { private Vector vetor_dados; private HttpConnection obj_conexao_http;//possibilita buscar os dados com o vector private String url; private InputStream obj_inputstream; private Aquario obj_aquario; private Thread thread; public acessoWeb(Aquario obj_aquario) { this.obj_aquario = obj_aquario; } public void inicia_thread() { System.out.println("Iniciando thread"); thread = new Thread(this); thread.start(); System.out.println("thread iniciada"); } public void run() { System.out.println("Iniciando public void run"); url = "http://localhost:8080/AquarioWeb-war/HoraAliTanque.jsp"; try { vetor_dados = new Vector(); //ira armazenar os dados para jogar na tela do celular String [] dados; obj_conexao_http = (HttpConnection) Connector.open(url); if (obj_conexao_http.getResponseCode() == HttpConnection.HTTP_OK) { obj_inputstream = obj_conexao_http.openDataInputStream(); System.out.println("Http OK!"); int i=1, caracter_lido = obj_inputstream.read(); StringBuffer stringbuffer = new StringBuffer(); while (caracter_lido != '^') { [b] //lendo o cod.[/b] while (caracter_lido != ','){ stringbuffer.append((char) caracter_lido); caracter_lido = obj_inputstream.read(); } dados = new String[3]; System.out.println("Código: " +stringbuffer.toString().trim()); dados[0] = stringbuffer.toString().trim(); stringbuffer.delete(0, stringbuffer.length()); caracter_lido = obj_inputstream.read(); [b] //lendo o nome do user[/b] while (caracter_lido != ','){ stringbuffer.append((char) caracter_lido); caracter_lido = obj_inputstream.read(); } System.out.println("Nome usuario: " +stringbuffer.toString().trim()); dados[1] = stringbuffer.toString().trim(); stringbuffer.delete(0, stringbuffer.length()); caracter_lido = obj_inputstream.read(); [b]//lendo tanque[/b] while (caracter_lido != '#'){ stringbuffer.append((char) caracter_lido); caracter_lido = obj_inputstream.read(); } System.out.println("Nome tanque: " +stringbuffer.toString().trim()); dados[2] = stringbuffer.toString().trim(); stringbuffer.delete(0, stringbuffer.length()); caracter_lido = obj_inputstream.read(); vetor_dados.addElement(dados); } obj_aquario.recebedadosTanque(vetor_dados); obj_inputstream.close(); [b] /*obj_aquario chama o método recebedados Tanque la do .java Aquario (Classe principal) passando assim o vetor_dados como parametro para que eu possa ta visualizando os dados que eu quero que ele list na tela do celular*/[/b] } } catch(IOException io) { System.out.println("Erro de IOException= "+io); } catch(SecurityException se) { System.out.println("Erro de SecuryteException= "+se); } } } Agradeço a atenção! Glauciney Compartilhar este post Link para o post Compartilhar em outros sites
Giovanni Ritchie 0 Denunciar post Postado Agosto 31, 2010 Verifique a memory disponivel para o emulador, provalmente você deve estar tentando carregar dados amais do que pode suportar a vm do celular. você precisa ter ideia da quantidade de dados suportados e da quantidade de dados que ta tentando carregar. Repare que na tua StringBuffer você simplesmente ñ define um tamamnho limite de dados. Abçs ;) Compartilhar este post Link para o post Compartilhar em outros sites
Glauciney 0 Denunciar post Postado Setembro 1, 2010 Verifique a memory disponivel para o emulador, provalmente você deve estar tentando carregar dados amais do que pode suportar a vm do celular. você precisa ter ideia da quantidade de dados suportados e da quantidade de dados que ta tentando carregar. Repare que na tua StringBuffer você simplesmente ñ define um tamamnho limite de dados. Abçs ;) Cara como eu defino o tamanho limite desses dados no meu StringBuffer? Compartilhar este post Link para o post Compartilhar em outros sites
Giovanni Ritchie 0 Denunciar post Postado Setembro 1, 2010 StringBuffer recebe como paramentro um inteiro q determina a quantidade de caracteres, mas existe algo a mais na lógica a se fzr.. Primeiro confirme se esse é o problema.. você pode testar fazendo um trace do espaço livre na JVM a media que vai recebendo os dados, se estiver diminuindo é pq realmente a memoria n ta suportando a quantidade de dados... Runtime rt = Runtime.getRuntime(); System.out.println(rt.freeMemory()); Abçs http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites