Dúvida com a importação de uma classe para o public static void main

3 respostas
E

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

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);
    }
}

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

3 Respostas

P

Porque é que a variável series é static?

Porque é que o método LerTxt não é só chamado depois da criação do objecto?

Parece haver aí alguma confusão entre static e não static. Um método static (main) não pode aceder a métodos ou variaveis não static.

Eu sugeria o seguinte:

  • a variavel series não deveria ser static
  • o construtor não deve criar o gráfico mas apenas definir o título (deve ter apenas um parâmetro)
  • o restante código do construtor passa para um método drawChart(), que não precisa de qualquer parâmetro.
  • o main ficaria:
final XYSeriesDemo demo = new XYSeriesDemo("Gráfico Modelo");  
         demo.LerTxt();  //Le dados
         demo.drawChart(); //Cria o chart
         demo.pack();  
         RefineryUtilities.centerFrameOnScreen(demo);  
         demo.setVisible(true);
E

fiz as modificações que vc sugeriu, mas dá os seguintes erros.

na sua linha 1:

cannot find symbol
symbol: construtor XYSeriesDemos(java.lang.String)
location: class xyseries.XYSeriesDemo

e na linha 3:

not a statement

e agora?
nao sei o q fazer.

P

Atenção que eu postei apenas o código main. Há alterações a fazer ao restante código, que não pus o código:

  • a variavel series não deveria ser static
  • o construtor não deve criar o gráfico mas apenas definir o título (deve ter apenas um parâmetro)
  • o restante código do construtor passa para um método drawChart(), que não precisa de qualquer parâmetro.
Criado 12 de março de 2009
Ultima resposta 13 de mar. de 2009
Respostas 3
Participantes 2