JFreeChart

6 respostas
leandrognaf

Bom dia pessoal estou precisando gerar um grafico com o jfreechart para uma trabalho da faculdade mas realmente to apanhando feio,

eu preciso gerar um grafico simples que pega uma serie de numeros da sequencia de fibonnacci e mostra qnt tempo cada um deles demorou pra ser processado.
bom vou colocar aqui oq considero importante em 1 primeiro momento se puderem me ajudar vou colocando o restante necessario.

private void jButtonCalcularActionPerformed(java.awt.event.ActionEvent evt) {                                                
        operacao = new Operacoes();
        TelaFibo t = new TelaFibo();
        int[] valoresParaCalculo = pegaValores();
        resultado = new long[10];
        tempos = new long[10];
        jButtonCalcular.setVisible(false);

        if (jRadioButtonExponencial.isSelected()) {
            fimGrafico = 0;
            for (int i = 0; i < 10; i++) {

                inicio = System.nanoTime();
                resultado[i] = operacao.fib1(valoresParaCalculo[i]);
                fim = System.nanoTime();
                tempos[i] = fim - inicio;
                if (fimGrafico < tempos[i]) {
                    fimGrafico = tempos[i];
                }
            }


            setaLabels(resultado, tempos);

        }
        if (jRadioButtonLinear.isSelected()) {
            fimGrafico = 0;
            for (int i = 0; i < 10; i++) {
                inicio = System.nanoTime();
                resultado[i] = operacao.fib2(valoresParaCalculo[i]);
                fim = System.nanoTime();
                tempos[i] = fim - inicio;

                if (fimGrafico < tempos[i]) {
                    fimGrafico = tempos[i];
                }
            }
            setaLabels(resultado, tempos);

        }

        if (jRadioButtonLog.isSelected()) {
            fimGrafico=0;
            for (int i = 0; i < 10; i++) {
                inicio = System.nanoTime();
                resultado[i] = operacao.fib3(valoresParaCalculo[i]);
                fim = System.nanoTime();
                tempos[i] = fim - inicio;

                if (fimGrafico < tempos[i]) {
                    fimGrafico = tempos[i];
                }
            }
            setaLabels(resultado, tempos);

        }

        jButtonVoltar.setVisible(true);
        jTextField1.setEditable(false);
        jTextField2.setEditable(false);
        jTextField3.setEditable(false);
        jTextField4.setEditable(false);
        jTextField5.setEditable(false);
        jTextField6.setEditable(false);
        jTextField7.setEditable(false);
        jTextField8.setEditable(false);
        jTextField9.setEditable(false);
        jTextField10.setEditable(false);
    }                                               

    public void setaLabels(long[] resultados, long[] tempos) {
        jLabel4.setText(String.valueOf(resultado[0]));
        jLabel5.setText(String.valueOf(resultado[1]));
        jLabel6.setText(String.valueOf(resultado[2]));
        jLabel7.setText(String.valueOf(resultado[3]));
        jLabel8.setText(String.valueOf(resultado[4]));
        jLabel9.setText(String.valueOf(resultado[5]));
        jLabel10.setText(String.valueOf(resultado[6]));
        jLabel11.setText(String.valueOf(resultado[7]));
        jLabel12.setText(String.valueOf(resultado[8]));
        jLabel13.setText(String.valueOf(resultado[9]));

        jLabel17.setText(String.valueOf(tempos[0]));
        jLabel18.setText(String.valueOf(tempos[1]));
        jLabel19.setText(String.valueOf(tempos[2]));
        jLabel20.setText(String.valueOf(tempos[3]));
        jLabel21.setText(String.valueOf(tempos[4]));
        jLabel22.setText(String.valueOf(tempos[5]));
        jLabel23.setText(String.valueOf(tempos[6]));
        jLabel24.setText(String.valueOf(tempos[7]));
        jLabel25.setText(String.valueOf(tempos[8]));
        jLabel26.setText(String.valueOf(tempos[9]));


    }

    public int[] pegaValores() {
        valores = new int[10];
        valores[0] = Integer.parseInt(jTextField1.getText());
        valores[1] = Integer.parseInt(jTextField2.getText());
        valores[2] = Integer.parseInt(jTextField3.getText());
        valores[3] = Integer.parseInt(jTextField4.getText());
        valores[4] = Integer.parseInt(jTextField5.getText());
        valores[5] = Integer.parseInt(jTextField6.getText());
        valores[6] = Integer.parseInt(jTextField7.getText());
        valores[7] = Integer.parseInt(jTextField8.getText());
        valores[8] = Integer.parseInt(jTextField9.getText());
        valores[9] = Integer.parseInt(jTextField10.getText());

        return valores;
    }

    private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {                                            
        // TODO add your handling code here:
}                                           

    private void jButtonVoltarActionPerformed(java.awt.event.ActionEvent evt) {                                              
        jButtonCalcular.setVisible(true);
        jButtonVoltar.setVisible(false);

        jLabel4.setText("");
        jLabel5.setText("");
        jLabel6.setText("");
        jLabel7.setText("");
        jLabel8.setText("");
        jLabel9.setText("");
        jLabel10.setText("");
        jLabel11.setText("");
        jLabel12.setText("");
        jLabel13.setText("");

        jLabel17.setText("");
        jLabel18.setText("");
        jLabel19.setText("");
        jLabel20.setText("");
        jLabel21.setText("");
        jLabel22.setText("");
        jLabel23.setText("");
        jLabel24.setText("");
        jLabel25.setText("");
        jLabel26.setText("");



        jTextField1.setEditable(true);
        jTextField2.setEditable(true);
        jTextField3.setEditable(true);
        jTextField4.setEditable(true);
        jTextField5.setEditable(true);
        jTextField6.setEditable(true);
        jTextField7.setEditable(true);
        jTextField8.setEditable(true);
        jTextField9.setEditable(true);
        jTextField10.setEditable(true);
    }                                             

    private void jButtonGeraGraficoActionPerformed(java.awt.event.ActionEvent evt) {                                         
        GeradorDeGrafico g = new GeradorDeGrafico(tempos, resultado);

    }
import java.io.IOException;
import java.io.OutputStream;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.Dataset;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;

public class GeradorDeGrafico {

    JFreeChart grafico;
    DefaultCategoryDataset dataset;

    public void criaGrafico() {
        this.grafico = ChartFactory.createLineChart("Fibonnacci", "Tempo", "Sequecia",
                dataset, PlotOrientation.VERTICAL, true, true, false);
    }

    public GeradorDeGrafico(long[] tempo, long[] resultado) {


        TimeSeries series = new TimeSeries("Fibonnaci");
        for (int i = 0; i <= 9;  i++) {
            String resul = String.valueOf(resultado[i]);
            dataset.addValue(tempo[i], "Tempo de Execução", resul);
            criaGrafico();

        }
    }
    public void salvar(OutputStream out)throws IOException{
        ChartUtilities.writeChartAsPNG(out, grafico, 500, 350);
    }



}

O erro atualmente qnd eu clico no botao gerar grafico e esse aqui o

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at GeradorDeGrafico.<init>(GeradorDeGrafico.java:29)
        at TelaFibo.jButtonGeraGraficoActionPerformed(TelaFibo.java:551)
        at TelaFibo.access$1200(TelaFibo.java:18)
        at TelaFibo$13.actionPerformed(TelaFibo.java:194)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6267)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Caso alguem saiba uma forma + facil de criar uma grafico tbm aceito sugestoes.

valeu

6 Respostas

eltonads

Em momento nenhum você está instanciando o seu atributo dataset (Classe GeradorGrafico).
Acredito que o erro (NullPointer) possa ser esse.

Att.,

leandrognaf

Criei um metodo construtor dando new e mesmo assim tah dando o msm erro.

import java.io.IOException;
import java.io.OutputStream;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.Dataset;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;

public class GeradorDeGrafico {

    JFreeChart grafico;
    DefaultCategoryDataset dataset;

    public GeradorDeGrafico() {

        dataset = new DefaultCategoryDataset();
    }



    public void criaGrafico() {
        this.grafico = ChartFactory.createLineChart("Fibonnacci", "Tempo", "Sequecia",
                dataset, PlotOrientation.VERTICAL, true, true, false);
    }

    public GeradorDeGrafico(long[] tempo, long[] resultado) {


        TimeSeries series = new TimeSeries("Fibonnaci");
        for (int i = 0; i <= 9;  i++) {
            String resul = String.valueOf(resultado[i]);
            dataset.addValue(tempo[i], "Tempo de Execução", resul);
            criaGrafico();

        }
    }
    public void salvar(OutputStream out)throws IOException{
        ChartUtilities.writeChartAsPNG(out, grafico, 500, 350);
    }



}
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at GeradorDeGrafico.<init>(GeradorDeGrafico.java:36)
        at TelaFibo.jButtonGeraGraficoActionPerformed(TelaFibo.java:551)
        at TelaFibo.access$1200(TelaFibo.java:18)
        at TelaFibo$13.actionPerformed(TelaFibo.java:194)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6267)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
CONSTRUÍDO COM SUCESSO (tempo total: 16 segundos)
eltonads

Você não está usando aquele construtor para criar seu GeradorGrafico…

Coloque um this(); na linha 30 da classe GeradorGrafico que deve resolver.

leandrognaf

o null pointer sumiu mas msm assim nao tah gerando grafico.

esqueci q eu ja tinha um costrutor na classe. bom tah assim a classe q gera o grafico.
import java.io.IOException;
import java.io.OutputStream;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.Dataset;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;

public class GeradorDeGrafico {

    JFreeChart grafico;
    DefaultCategoryDataset dataset;


    public void criaGrafico() {
        this.grafico = ChartFactory.createLineChart("Fibonnacci", "Tempo", "Sequecia",
                dataset, PlotOrientation.VERTICAL, true, true, false);
    }

    public GeradorDeGrafico(long[] tempo, long[] resultado) {
        dataset = new DefaultCategoryDataset();

        TimeSeries series = new TimeSeries("Fibonnaci");
        for (int i = 0; i <= 9;  i++) {
            String resul = String.valueOf(resultado[i]);
            dataset.addValue(tempo[i], "Tempo de Execução", resul);
            criaGrafico();

        }
    }
    public void salvar(OutputStream out)throws IOException{
        ChartUtilities.writeChartAsPNG(out, grafico, 500, 350);
    }



}
eltonads

Em momento nenhum você invoca o seu método “salvar” da classe GeradorGrafico.
Pode ser isso.

leandrognaf
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;

 public class GeradorDeGrafico {

     JFreeChart grafico;
     DefaultCategoryDataset dataset;


     public void criaGrafico() {
         this.grafico = ChartFactory.createLineChart("Fibonnacci", "Tempo", "Sequecia",
                 dataset, PlotOrientation.VERTICAL, true, true, false);
     }

     public GeradorDeGrafico(long[] tempo, long[] resultado) {
         dataset = new DefaultCategoryDataset();

         for (int i = 0; i <= 9;  i++) {
            try {
                String resul = String.valueOf(resultado[i]);
                dataset.addValue(tempo[i], "Tempo de Execução", resul);
                criaGrafico();
                salvar(new FileOutputStream("grafico.png"));
            } catch (IOException ex) {
                Logger.getLogger(GeradorDeGrafico.class.getName()).log(Level.SEVERE, null, ex);
            }

         }
     }
     public void salvar(OutputStream out)throws IOException{
         ChartUtilities.writeChartAsPNG(out, grafico, 500, 350);
     }



 }

Ele simplesmente nao gera

Criado 25 de março de 2011
Ultima resposta 25 de mar. de 2011
Respostas 6
Participantes 2