문제

간단한보기로 RCP 응용 프로그램에서 JFreechart를 사용하려고합니다. JFREECHART JAR 파일을 프로젝트에 참조 라이브러리로 추가했습니다.

오류로 인해보기를 만들 수 없습니다.

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)

......

이것은 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;

    }
}
도움이 되었습니까?

해결책

당신이 의존성을 참조 라이브러리로 추가했다고 말하면, 나는 당신이 그것을 자바 빌드 경로 프로젝트 속성의 섹션은 작업 공간에서 컴파일에만 작동합니다. RCP는 대상 플랫폼에서 해결되도록 매니페스트에 정의되어야하는 종속성/중첩 항아리가 필요합니다.

플러그인 종속성을 설정하려면 매니페스트 파일을 열면 멀티 탭 편집기가 표시됩니다. 선택하십시오 의존성 탭과 클릭 추가하다..., 플러그인을 선택하고 확인하십시오.

dependencies tab screenshot

플러그인에서 항아리를 묶기로 선택한 경우 대신 Manifest의 클래스 경로에 추가해야합니다. 항아리가 플러그인 프로젝트의 하위 지사에 있다고 가정하면 실행 시간 매니페스트 편집기의 탭을 선택한 다음 클래스 경로 섹션 추가하다... 단추. 항아리와 확인을 추가하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top