Question

Je suis en train ans utiliser JFreeChart dans l'application RCP avec une vue simple. J'ai ajouté jar jfreechart comme une bibliothèque de référence au projet.

Le point de vue n'a pas pu être créé en raison de l'erreur:

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)

......

Ceci est le code source pour 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;

    }
}
Était-ce utile?

La solution

Quand vous dites que vous avez ajouté la dépendance en tant que bibliothèque de référence, je suppose que vous voulez dire que vous avez ajouté comme une dépendance de pot au projet Eclipse via le Chemin de génération Java des propriétés du projet, cela travailler uniquement pour la compilation dans votre espace de travail. RCP a besoin de dépendances / pots imbriqués à définir dans le manifeste afin qu'ils soient résolus dans la plate-forme cible.

Pour définir une dépendance de plug-in, ouvrez votre fichier Manifest, vous devriez voir un éditeur multi-onglets. Sélectionnez Dépendances et cliquez sur Ajouter ... , sélectionnez le plug-in, et OK.

Dépendances capture d

Si vous choisissez de regrouper le pot dans votre plugin, vous avez besoin au lieu de l'ajouter au classpath du Manifest. En supposant que le pot est dans un sous-répertoire de votre projet de plug-in, sélectionnez le Runtime de l'éditeur Manifest, puis sélectionnez Classpath de Ajouter ... . Ajouter le pot et OK.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top