2009-10-02 16 views
6

Sto provando a utilizzare JFreeChart nell'applicazione RCP con una vista semplice. Ho aggiunto il file jar JfreeChart come libreria di riferimento da proiettare.Eclipse RCP con JFreeChart

La vista non potrebbe essere creato a causa dell'errore:

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) 

......

Questo è il codice sorgente per 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; 

    } 
} 

risposta

7

Quando dici di aver aggiunto la dipendenza come libreria di riferimento, presumo tu intendi che l'hai aggiunta come dipendenza del jar al progetto Eclipse tramite la sezione Java Build Path di th Le proprietà del progetto, questo funzionerà solo per la compilazione nel tuo spazio di lavoro. RCP richiede dipendenze/jar annidati da definire nel manifesto in modo da essere risolti nella piattaforma di destinazione.

Per impostare una dipendenza plug-in, aprire il file Manifest, si dovrebbe vedere un editor multi-tab. Selezionare la scheda Dipendenze e fare clic su Aggiungi ..., selezionare il plug-in e OK.

dependencies tab screenshot

Se si sceglie di riunire il vaso nel vostro plugin, è invece necessario aggiungerlo al classpath del manifesto. Supponendo che il jar si trovi in ​​una sottodirectory del progetto del plugin, seleziona la scheda Runtime dell'editor Manifest, quindi seleziona il pulsante Classpath sezione Aggiungi .... Aggiungi il barattolo e OK.

+0

Grazie. Funziona dopo aver aggiunto le librerie JFreeChart al classpath del Manifest. – penguru

+0

Prego, per ulteriori informazioni consulta questo tutorial in 3 parti sulle app RCP: http://www.eclipse.org/articles/Article-RCP-1/ tutorial1.html –

+0

Ben posizionato e illustrato, come al solito. +1 – VonC