Pregunta

Estoy intentando yo uso JFreeChart en aplicación RCP con una visión simple. Añadí archivo jar jfreechart como una biblioteca de referencia para proyectar.

La vista no se pudo crear debido al error:

Could not create the view: Plug-in "ViewJFreeChart" was unable to instantiate class "viewJFreeChart.View".
java.lang.NoClassDefFoundError: org/jfree/data/general/PieDataset
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.lang.Class.getConstructor0(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)

......

Este es el código fuente de View.java:

package viewJFreeChart;

import java.awt.Font;

import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.experimental.chart.swt.ChartComposite;

public class View extends ViewPart {
    public static final String ID = "ViewJFreeChart.view";

    private TableViewer viewer;

    /**
     * This is a callback that will allow us to create the viewer and initialize
     * it.
     */
    public void createPartControl(Composite parent) {

        JFreeChart chart = createChart(createDataset());
        final ChartComposite frame = new ChartComposite(parent, SWT.NONE,
                chart, true);
    }

    /**
     * Passing the focus request to the viewer's control.
     */
    public void setFocus() {
        viewer.getControl().setFocus();
    }

    /**
     * Creates the Dataset for the Pie chart
     */
    private PieDataset createDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("One", new Double(43.2));
        dataset.setValue("Two", new Double(10.0));
        dataset.setValue("Three", new Double(27.5));
        dataset.setValue("Four", new Double(17.5));
        dataset.setValue("Five", new Double(11.0));
        dataset.setValue("Six", new Double(19.4));
        return dataset;
    }

    /**
     * Creates the Chart based on a dataset
     */
    private JFreeChart createChart(PieDataset dataset) {

        JFreeChart chart = ChartFactory.createPieChart("Pie Chart Demo 1", // chart
                // title
                dataset, // data
                true, // include legend
                true, false);

        PiePlot plot = (PiePlot) chart.getPlot();
        plot.setSectionOutlinesVisible(false);
        plot.setLabelFont(new Font("SansSerif", Font.PLAIN, 12));
        plot.setNoDataMessage("No data available");
        plot.setCircular(false);
        plot.setLabelGap(0.02);
        return chart;

    }
}
¿Fue útil?

Solución

Cuando usted dice que agregó la dependencia como una biblioteca de referencia, supongo que te refieres lo agregó como una dependencia frasco para el proyecto Eclipse a través de la Java Build Path de las propiedades del proyecto, esta voluntad trabajar sólo para su recopilación en su espacio de trabajo. RCP necesita dependencias / frascos anidados que se definirán en el manifiesto por lo que se resuelven en la plataforma de destino.

Para establecer una dependencia plugin, abrir su archivo de manifiesto, debería ver un editor multi-pestañas. Seleccione la Dependencias y Añadir ... , seleccione el plugin, y OK.

dependencias pestaña pantalla

Si usted está eligiendo para agrupar el frasco en su plugin, en su lugar hay que añadirlo a la ruta de clase del Manifiesto. Suponiendo que el frasco está en un subdirectorio de su proyecto de plug-in, seleccione el Tiempo de ejecución pestaña del editor de manifiesto, a continuación, seleccione la opción ruta de clases de la sección Añadir ... . Añadir al frasco y OK.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top