mandei depurar o projeto e aparexeu a seguinte msg:
Ouvindo em javadebug
Executando programa do usuário
Depurador interrompido em código-fonte não compilável.
Thread main parada em XYSeriesDemo.java:37.
o que siginifica?
mandei depurar o projeto e aparexeu a seguinte msg:
Ouvindo em javadebug
Executando programa do usuário
Depurador interrompido em código-fonte não compilável.
Thread main parada em XYSeriesDemo.java:37.
o que siginifica?
Você colocou o ponto (.) entre a classe Integer e o metodo parseInt(…)?
Como está na primeira mensagem:
int x = IntegerparseInt(items[3]);
Correto:
int x = Integer.parseInt(items[3]);
Se não, dá erro de compilação e não é possível depurar. É isso?
com a inclusõ do “.” deu mais um mont d erros
estes:
Exception in thread “main” java.lang.NumberFormatException: For input string: “3.251”
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:456)
at java.lang.Integer.parseInt(Integer.java:497)
at xyseries.XYSeriesDemo.LerTxt(XYSeriesDemo.java:38)
at xyseries.XYSeriesDemo.main(XYSeriesDemo.java:82)
Java Result: 1
O erro ocorre, pois, o número “3.251” não faz parte do conjunto dos Inteiros e o seu código está usando “Integer.parseInt(…)”. Este número pertence ao conjunto dos números reais.
Hehehe, quem foi que disse que aquelas aulas da 5a. série sobre conjuntos não serviam para nada?
Em Java, números reais são representados pelo tipo primitivo ‘double’.
double x = Double.parseDouble(items[3]);
Observando melhor o seu código percebi que você deseja adicionar em ‘series’ todos os pontos lidos no arquivo ‘log.txt’.
Olha o que está acontecendo:
//(...)
String[] items = null;
while ((linha = br.readLine()) != null) // Enquanto não chegar ao fim do arquivo 'log.txt' (...)
items = linha.split(","); // (...) execute apenas esta linha!
/* neste ponto, o array de String 'items'
só tem o resultado da última linha do arquivo! */
if (items.length > 1 && items[0].equals("104")) {
double x = Double.parseDouble(items[3]); // lendo o 'x' da última linha
double y = Double.parseDouble(items[4]); // lendo o 'y' da última linha
series.add(x, y);
} // fim do bloco if
//(...)
Ou seja, você deve criar um bloco (’{’ e ‘}’) para o comando ‘while’ . Você também pode manter a declaração da variável ‘items’ dentro do bloco while, pois, esta variável não precisa ser usada fora deste.
Olha como fica com a inclusão do bloco do ‘while’:
while ((linha = br.readLine()) != null) { // inicio do bloco while
/* A variável 'items' pode ser
somente declarada aqui, pois,
esta não é usada fora do bloco do 'while'. */
String[] items = linha.split(",");
/* Como os comandos abaixo estão dentro do bloco do
while, serão adicionados os números x e y para todas as
linhas do arquivo. */
if (items.length > 1 && items[0].equals("104")) {
double x = Double.parseDouble(items[3]);
double y = Double.parseDouble(items[4]);
series.add(x, y);
} // fim do bloco if
} // fim do bloco while
Consultei o site http://www.jfree.org/jfreechart/api/gjdoc/org/jfree/data/xy/XYSeries.html e para sua sorte, existe um metodo add(double, double) para a classe XYSeries. Isto é, você não precisará converter o número lido do arquivo para o tipo ‘int’.
Boa sorte.
boa tarde… fiz tds as alterações sugeridas… e não deu mais erro.
porém desconfio que os valores nao estao sendo armazenados nas variáveis x e y, pois o gráfico aparece vazio…
o que está acontecendo?
[quote=eduardoesn]boa tarde… fiz tds as alterações sugeridas… e não deu mais erro.
porém desconfio que os valores nao estao sendo armazenados nas variáveis x e y, pois o gráfico aparece vazio…
o que está acontecendo?[/quote]
Não desconfie de nada, use o debugador da IDE e veja você mesmo o que está acontecendo com as variáveis.
Agora não consigo mais imaginar nada de errado no código. Você deve verificar o conteúdo do log.txt (lembre-se que o aplicativo só pega os valores das linhas que começam com a string ‘104’).
Nunca mexi com o JFreeChart. Pode ser que tenha algum problema no uso desta biblioteca.
O melhor mesmo é depurar a aplicação e inspecionar o que está sendo passado para o método ‘series.add()’.
eu mando depurar a aplixação, porém ele nao mostra msg alguma, pelo contrário, roda o programa sem carregar as variáveis e plotar no gráfico.
a única msg q ele me mostra é:
“executando programa do usuário”
Em vez de rodar seu programa dando um duplo-clique no JAR (isso chama o javaw, e as mensagens de erro vão para o lixo), rode manualmente seu programa em um Prompt de Comando, usando o java.exe.
Aí você vai ver todas aquelas mensagens de erro (stack traces e outras tranqueiras) que aparecem durante a execução do programa.
A dica é você reconfigurar o “tamanho de buffer de tela” do Prompt de Comando para que ele guarde mais linhas que as 300 que são default. Eu costumo deixar em 1024.
Para você fazer isso, clique com o botão esquerdo no menu de sistema do Prompt de Comando, e escolha a opção Propriedades. Então procure a aba Layout, acerte o “Tamanho de Buffer de Tela” para Altura = 1024, e então clique em OK. Eu recomendo, ao clicar novamente OK, alterar a opção para “(.) Modificar o atalho que iniciou esta janela”, pra você não ter de ficar reconfigurando isso toda hora.
andei fazendo umas modificações em meu código e descobri uma coisa.
o problema nao está nas variáveis (dadosx e dadosy) que gravo os valores.
quando mando imprimir só as variáveis, elas me mostram os valores corretos. O problema está em carregar estas variáveis como par ordenado (x, y).[code]
if (items.length > 1 && items[0].equals(“104”)) {
double dadosx = Double.parseDouble(items[3]);
double dadosy = Double.parseDouble(items[4]);
series.add(dadosx, dadosy);
System.out.println(dadosx);
System.out.println(dadosy);
}[/code]
neste pedaço do código quando dou o comando
System.out.println(series);
ele me retorna umas coisas completamentes estranhas… tipo:
org.jfree.data.xy.XYSeries@47e8d656
org.jfree.data.xy.XYSeries@47e8d656
org.jfree.data.xy.XYSeries@a4aba1da
org.jfree.data.xy.XYSeries@a4aba1da
org.jfree.data.xy.XYSeries@e83bb265
org.jfree.data.xy.XYSeries@e83bb265
sinceramente não sei o q significa isto.
alguém sabe?
O comando ‘System.Out.println(series);’ apresenta o nome da classe e o id da instância ‘series’. Para você consultar os valores (x,y) que você adicionou em ‘series’, você precisa usar os metodos getItemCount(), getX() e getY(). Por exemplo:
int ind;
for (ind=0; ind<series.getItemCount(); ind++) {
System.out.print(ind);
System.out.print(" - X=");
System.out.print(series.getX(ind));
System.out.print(" Y=");
System.out.print(series.getY(ind));
}