Probleme beim einbinden von JFreeChart in eine RCP

Steffen01

Mitglied
HI ich habe ein RCP und habe mir einen einfachen View gemacht diese soll ein JFreeChart enthalten:


Code:
import java.awt.Color;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.part.ViewPart;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.experimental.chart.swt.ChartComposite;

public class TestDiagrammView extends ViewPart {
	public static final String ID="testDiagramm.view2";
	private JFreeChart chart;
	public TestDiagrammView() {
	
	}
	
	@Override
	public void createPartControl(Composite parent) {
		
        JFreeChart chart = createChart(createDataset());
  
        final ChartComposite frame = new ChartComposite(parent, SWT.NONE, chart,
                true);
        frame.pack();

	}

	@Override
	public void setFocus() {
	

	}
	 private static CategoryDataset createDataset() {
		 
	        // row keys...
	        String series1 = "First";
	        String series2 = "Second";
	        String series3 = "Third";

	        // column keys...
	        String category1 = "Category 1";
	        String category2 = "Category 2";
	        String category3 = "Category 3";
	        String category4 = "Category 4";
	        String category5 = "Category 5";

	        // create the dataset...
	        DefaultCategoryDataset dataset = new DefaultCategoryDataset();

	        dataset.addValue(1.0, series1, category1);
	        dataset.addValue(4.0, series1, category2);
	        dataset.addValue(3.0, series1, category3);
	        dataset.addValue(5.0, series1, category4);
	        dataset.addValue(5.0, series1, category5);

	        dataset.addValue(5.0, series2, category1);
	        dataset.addValue(7.0, series2, category2);
	        dataset.addValue(6.0, series2, category3);
	        dataset.addValue(8.0, series2, category4);
	        dataset.addValue(4.0, series2, category5);

	        dataset.addValue(4.0, series3, category1);
	        dataset.addValue(3.0, series3, category2);
	        dataset.addValue(2.0, series3, category3);
	        dataset.addValue(3.0, series3, category4);
	        dataset.addValue(6.0, series3, category5);
	        
	        return dataset;
	        
	    }
	    
	    /**
	     * Creates a sample chart.
	     * 
	     * @param dataset  the dataset.
	     * 
	     * @return The chart.
	     */
	    private static JFreeChart createChart(CategoryDataset dataset) {
	    	
	        // create the chart...
	        JFreeChart chart = ChartFactory.createBarChart(
	            "Bar Chart Demo",         // chart title
	            "Category",               // domain axis label
	            "Value",                  // range axis label
	            dataset,                  // data
	            PlotOrientation.VERTICAL, // orientation
	            true,                     // include legend
	            true,                     // tooltips?
	            false                     // URLs?
	        );

	        // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...

	        // set the background color for the chart...
	        chart.setBackgroundPaint(Color.white);

	        // get a reference to the plot for further customisation...
	        CategoryPlot plot = (CategoryPlot) chart.getPlot();
	        plot.setBackgroundPaint(Color.lightGray);
	        plot.setDomainGridlinePaint(Color.white);
	        plot.setDomainGridlinesVisible(true);
	        plot.setRangeGridlinePaint(Color.white);

	        // set the range axis to display integers only...
	        final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
	        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

	        // disable bar outlines...
	        BarRenderer renderer = (BarRenderer) plot.getRenderer();
	        renderer.setDrawBarOutline(false);

	        CategoryAxis domainAxis = plot.getDomainAxis();
	        domainAxis.setCategoryLabelPositions(
	            CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 6.0)
	        );
	        // OPTIONAL CUSTOMISATION COMPLETED.
	        
	        return chart;
	        
	    }


}

Dieser View wird von einer Action aufgerufen.

Mein Problem ist das ich eine Fehlermeldung bekomme die wie folgt laut:

Unhandled event loop exception
Reason:
org/eclipse/swt/events/SelectionListener




Wo könnte der Fehler liegen.
Behandle ich die Klassen falsch?

Würde mich freuen wenn mir da jemand helfen kann.

Grüße
STeffen
 
Wenn du kannst benutze nicht den SWT Teil von JFreeChart. Es ist schon so gemeint mit dem experimental. Der hat ein Haufen Speicherlecks. Wenn ich mit meinem Projekt mal ein wenig mehr Zeit habe werden wir die Bugfixes für den Teile mal den JFreeChart entwicklern zukommen lassen.

Das Problem was du hast kommt mir ansonsten leider nicht bekannt vor. Gibt es denn keinen richtigen Stacktrace?
 
Es kommt nur diese eine Fehlermeldung.
Beim Ersten Klick kommt:
Reason:
org/eclipse/swt/events/SelectionListener
Unhandled event loop exception


Beim zweiten Versuch:
Reason:
org/jfree/experimental/chart/swt/ChartComposite
Unhandled event loop exception


Wie könnte ich den den ChartComposite umgehen?
Da hier der Fehler auftritt?
 
Versuch mal es als SWT Standalone laufen zu lassen.

Folgendes funktioniert bei mir mit SWT 3.3M4 und jfreechart-1.0.4 und jfreechart-1.0.4-swt
Java:
import java.awt.Color;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.experimental.chart.swt.ChartComposite;

public class TestDiagrammView {

	public static final String ID = "testDiagramm.view2";
	private JFreeChart chart;

	public TestDiagrammView() {

	}

	private static CategoryDataset createDataset() {

		// row keys...
		String series1 = "First";
		String series2 = "Second";
		String series3 = "Third";

		// column keys...
		String category1 = "Category 1";
		String category2 = "Category 2";
		String category3 = "Category 3";
		String category4 = "Category 4";
		String category5 = "Category 5";

		// create the dataset...
		DefaultCategoryDataset dataset = new DefaultCategoryDataset( );

		dataset.addValue(1.0, series1, category1);
		dataset.addValue(4.0, series1, category2);
		dataset.addValue(3.0, series1, category3);
		dataset.addValue(5.0, series1, category4);
		dataset.addValue(5.0, series1, category5);

		dataset.addValue(5.0, series2, category1);
		dataset.addValue(7.0, series2, category2);
		dataset.addValue(6.0, series2, category3);
		dataset.addValue(8.0, series2, category4);
		dataset.addValue(4.0, series2, category5);

		dataset.addValue(4.0, series3, category1);
		dataset.addValue(3.0, series3, category2);
		dataset.addValue(2.0, series3, category3);
		dataset.addValue(3.0, series3, category4);
		dataset.addValue(6.0, series3, category5);

		return dataset;

	}

	/**
	 * Creates a sample chart.
	 * 
	 * @param dataset
	 *            the dataset.
	 * @return The chart.
	 */
	private static JFreeChart createChart(CategoryDataset dataset) {

		// create the chart...
		JFreeChart chart = ChartFactory.createBarChart("Bar Chart Demo", // chart
																			// title
				"Category", // domain axis label
				"Value", // range axis label
				dataset, // data
				PlotOrientation.VERTICAL, // orientation
				true, // include legend
				true, // tooltips?
				false // URLs?
				);

		// NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...

		// set the background color for the chart...
		chart.setBackgroundPaint(Color.white);

		// get a reference to the plot for further customisation...
		CategoryPlot plot = (CategoryPlot) chart.getPlot( );
		plot.setBackgroundPaint(Color.lightGray);
		plot.setDomainGridlinePaint(Color.white);
		plot.setDomainGridlinesVisible(true);
		plot.setRangeGridlinePaint(Color.white);

		// set the range axis to display integers only...
		final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis( );
		rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits( ));

		// disable bar outlines...
		BarRenderer renderer = (BarRenderer) plot.getRenderer( );
		renderer.setDrawBarOutline(false);

		CategoryAxis domainAxis = plot.getDomainAxis( );
		domainAxis.setCategoryLabelPositions(CategoryLabelPositions
				.createUpRotationLabelPositions(Math.PI / 6.0));
		// OPTIONAL CUSTOMISATION COMPLETED.

		return chart;

	}

	public static void main(String[] args) {
		Display display = new Display( );
		Shell shell = new Shell(display);

		shell.setLayout(new FillLayout( ));
		JFreeChart chart = createChart(createDataset( ));

		final ChartComposite frame = new ChartComposite(shell, SWT.NONE, chart,
				true);
		frame.pack( );
		shell.setSize(500, 300);
		shell.open( );

		while (!shell.isDisposed( )) {
			if (!display.readAndDispatch( ))
				display.sleep( );
		}
		display.dispose( );
	}

}
 
Ja das ist ja das eigenartige .. das funktioniert. Jedoch nicht in auf der RCP.

Es wird kein Stacktrace ausgegeben da der Fehler vorher in einer anderen Klasse auftritt.

Hmmm ich denke mal es Fehlt irgend eine Lib.
Aber welche. Habe die ganze Lib von JFreeChart.
 
Das Problem hat sich gelöst.

Man muss die Libs von JFreeChart in den Classpath von der Plug_in.xml einfügen. Anderst funkioniert es nicht.
- Dachte erst das dies nicht so relevant sei wie man die Libs zur Verfügung stellt.


Grüße
 
Zurück