Frage

Ich versuche, yo Verwendung JFreeChart in RCP-Anwendung mit einem einfachen Blick. Ich habe JFreeChart JAR-Datei als referenzierte Bibliothek zu projizieren.

Der Blick nicht wegen der Fehler erstellt werden:

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)

......

Dies ist der Quellcode für 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;

    }
}
War es hilfreich?

Lösung

Wenn Sie sagen, Sie die Abhängigkeit als referenzierte Bibliothek hinzugefügt, ich nehme an, Sie meinen Sie hinzugefügt, um es als jar Abhängigkeit zu dem Eclipse-Projekt über die Java Build Path Abschnitt der Projekteigenschaften, dieser Wille nur für die Kompilierung in Ihrem Arbeitsbereich arbeitet. RCP muss Abhängigkeiten / verschachtelte Gläser im Manifest definiert werden, so dass sie in der Zielplattform gelöst werden.

ein Plugin Abhängigkeit setzen, öffnen Sie Ihre Manifest-Datei, sollten Sie einen mit mehreren Registerkarten-Editor sehen. Wählen Sie die Abhängigkeiten und klicken Sie auf Hinzufügen ... , wählen Sie das Plugin und OK.

Registerkarte Abhängigkeiten Screenshot

Wenn Sie wählen Sie das Glas in dem Plugin zu bündeln, müssen Sie stattdessen es auf das Classpath Manifest hinzuzufügen. in einem Unterverzeichnis des Plugin-Projekt das Glas unter der Annahme ist, wählen Sie die Runtime des Manifest-Editor, und wählen Sie die Classpath Hinzufügen ... . Fügen Sie das Glas und OK.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top