Problema com a importação de uma classe dentro do public static void main

Boa tarde pessoal, tenho um código que segue abaixo e estou com uma dúvida(problema):

[code]
package xyseries;

/*
*

  • @author eduardoesn
    */
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.axis.NumberAxis;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.plot.XYPlot;
    import org.jfree.data.xy.XYSeries;
    import org.jfree.data.xy.XYSeriesCollection;
    import org.jfree.ui.ApplicationFrame;
    import org.jfree.ui.RefineryUtilities;
    import lertxt.LerTxt;

public class XYSeriesDemo extends ApplicationFrame {

private Object br;
static XYSeries series;

public void LerTxt() throws IOException {
    series = new XYSeries("Velocidade do vento");
    FileReader reader = new FileReader("log.txt");
    BufferedReader br = new BufferedReader(reader);
    String linha;
    while ((linha = br.readLine()) != null);
    String[] items = linha.split(",");

    if (items.length > 1 && items[0].equals("104")) {
        int x = IntegerparseInt(items[3]);
        int y = IntegerparseInt(items[4]);
        series.add(x, y);
    }

    try {
    } catch (Exception ex) {
        ex.printStackTrace();
    }

}

public int IntegerparseInt(String string) {
    throw new UnsupportedOperationException("Not yet implemented");
}

public XYSeriesDemo(final String title, XYSeries dados) {

    super(title);

    //XYSeries series = new XYSeries("Velocidade do vento");
    //series.add(x, y);
    //series.add(4.0, -0.785);
    //series.add(2.5, 90.0);
    //series.add(5.0, -105.0);
    //series.add(8.7, 150.0);
    //series.add(10.0,101.0);
    //series.add(11.0, 100.0);
    final XYSeriesCollection data = new XYSeriesCollection(dados);
    final JFreeChart chart = ChartFactory.createXYLineChart("Anemômetro",
            "Data", "m/s",
            data, PlotOrientation.VERTICAL, true, true, false);
    final ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.setPreferredSize(new java.awt.Dimension(1000, 400));
    setContentPane(chartPanel);

}

/**
 * @param args the command line arguments
 */
public static void main(final String[] args) {
    
    LerTxt();
    final XYSeriesDemo demo = new XYSeriesDemo("Gráfico Modelo", series);
    demo.pack();
    RefineryUtilities.centerFrameOnScreen(demo);
    demo.setVisible(true);
}

}[/code]

O meu problema é o seguinte: preciso chamar a função LerTxt para adicionar valores na variável series e plotar o gráfico.
Não estou conseguindo chamar esta função dentro do public static void main.
Alguém poderia me ajudar?
Obrigado
Eduardo

LerTxt é um método que requer um objeto da classe XYSeriesDemo - no seu caso, você poderia usar “demo.LerTxt()”.

Se esse método tivesse sido declarado como “static” ele não iria requerer um objeto para ser executado.

o quer dizer este erro?

Exception in thread “main” java.lang.NullPointerException

É que você tem de chamar “demo.LerTxt” depois de inicializar a variável “demo”, não antes, senão vai encontrar esse maldito “NullPointerException”.

certo, mas não estou conseguindo chamar este “demo.LerTxt”, não estou sabendo em que parte do código colocar.
Ta dando o mesmo erro sempre.

Eu tenho que acrescentar apenas isto ou preciso fazer alguma modificação no código?

Troque as linhas 79 e 80 de lugar e veja o que ocorre.

corrigindo.
trocando as linhas que vc disse…
acontece a mesma coisa, dá o NullPointerException

Oi,

Amigo, tem certeza que você fez esse código ? estranho que você não sabe o que é NullPointerException.

Conforme o thingol disse:

final XYSeriesDemo demo = new XYSeriesDemo("Gráfico Modelo", series); demo.LerTxt();

Tchauzin!

eu fiz com um camarada junto aqui do laboratório, eu não conhecia o java, e foi passado pra mim que eu teria q fazer um programa em java q tivesse esta função (ler e plotar) entao comecei a correr atrás.

ou seja, estou começando a trabalhar com java agora, um mês e pouquinho…

Oi,

Você fez o que eu coloquei no comentario anterior ?

Tchauzin!

fiz… do jeito q vc falou…
e cotinua dando a mesma coisa.

Oi,

fiz aqui e funcionou… estranho!
Coloque seu código aqui novamente.

Tchauzin!

package xyseries;

/*
*
* @author eduardoesn
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import lertxt.LerTxt;

public class XYSeriesDemo extends ApplicationFrame {

    private Object br;
    static XYSeries series;

    public void LerTxt() throws IOException {
        series = new XYSeries("Velocidade do vento");
        FileReader reader = new FileReader("log.txt");
        BufferedReader br = new BufferedReader(reader);
        String linha;
        while ((linha = br.readLine()) != null);
        String[] items = linha.split(",");

        if (items.length > 1 && items[0].equals("104")) {
            int x = IntegerparseInt(items[3]);
            int y = IntegerparseInt(items[4]);
            series.add(x, y);
        }

        try {
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }

    public int IntegerparseInt(String string) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    public XYSeriesDemo(final String title, XYSeries dados) {

        super(title);

        //XYSeries series = new XYSeries("Velocidade do vento");
        //series.add(x, y);
        //series.add(4.0, -0.785);
        //series.add(2.5, 90.0);
        //series.add(5.0, -105.0);
        //series.add(8.7, 150.0);
        //series.add(10.0,101.0);
        //series.add(11.0, 100.0);
        final XYSeriesCollection data = new XYSeriesCollection(dados);
        final JFreeChart chart = ChartFactory.createXYLineChart("Anemômetro",
                "Data", "m/s",
                data, PlotOrientation.VERTICAL, true, true, false);
        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(1000, 400));
        setContentPane(chartPanel);

    }

    /**
     * @param args the command line arguments
     */
    public static void main(final String[] args) throws IOException {


        final XYSeriesDemo demo = new XYSeriesDemo("Gráfico Modelo", series);
        demo.LerTxt();
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);
    }
}

Importe o projeto dentro do Eclipse e debugue o código. Ou então veja a mensagem de erro inteira que aparece no DOS, para ter uma idéia do que pode estar causando NullPointer.

roger75

a msg completa q aparece é esta

run:
Exception in thread “main” java.lang.NullPointerException
at xyseries.XYSeriesDemo.LerTxt(XYSeriesDemo.java:33)
at xyseries.XYSeriesDemo.main(XYSeriesDemo.java:81)
Java Result: 1

eduardoesn, você sabe o que é um NullPointerException?

Eles acontecem quando você tem um objeto nulo e quer acessar qualquer coisa dentro dele. Um exemplo

String s = "Grupo de Usuários Java";
int tamanho = s.length(); // funciona

String s2 = null;
int tamanho2 = s2.length(); // s2.length() gera um NPE pois s2 é nulo

[quote=eduardoesn]roger75

a msg completa q aparece é esta

run:
Exception in thread “main” java.lang.NullPointerException
at xyseries.XYSeriesDemo.LerTxt(XYSeriesDemo.java:33)
at xyseries.XYSeriesDemo.main(XYSeriesDemo.java:81)
Java Result: 1
[/quote]

while ((linha = br.readLine()) != null); String[] items = linha.split(",");

No fim da linha do “while” acho que não tem esse ponto e vírgula. Acho que você queria que “items” ficasse dentro do “while”, não?

é isso que eu quero roger, mas quando eu tiro o “;”, começa a dar uma série de erros.
O que nao estou conseguindo fazer é o que o Bruno Laturner falou.

Não tem nd dentro do objeto.

Ocorre outros erros, provavelmente, porque a declaração da variável ‘items’ deve estar fora do bloco do while. Tente assim:

String linha;  
String[] items;
while ((linha = br.readLine()) != null) 
    items = linha.split(",");  

Talvez vc precise iniciar a ‘items’ com algum valor padrão para não dar falhas caso o arquivo esteja vazio.

[]s
Sergio Marcelo

marcelo é extamente isso q da acusando
que a variável items provavelmente nao foi inicializada

aí eu segui a opção dele de inicializar a variável, e ele fez String[] items = null;

porém o programa roda, mas não aparece gráfico. abre somente uma tela com os eixos, uns valores quaisquer nos eixos e sem linha d gráfico.