[JFreeChart] Bug sur createBufferedImage (Pb avec linux)
Bonjour tout le monde,
J'ai un comportement étrange lors de l'appel de la methode createBufferedImage (class JFreeChart).
Sur mon site web fait en java 5 + struts, avec WebLogic, j'ai une erreur pdt l'execution du createBufferedImage.
Le hic, c'est que cette erreur n'apparait pas au debut. J'ai l'impression qu'elle arrive après un certain temps...
Ce qui est etrange aussi, c'est que mon catch n'intercepte aucune exception.
Simplement l'image généré fait 0 octet et est illisbile.
Est-ce que qqn a une idée?
Est-ce un pb de mémoire ? de cache ?
Voici le code utilisé pour générer l'image :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
// Creation d'un nouveau graph
CategoryPlot plot = new CategoryPlot();
// Ajout du graph en forme d'histogramme
plot.setDataset(datasetTravail);
plot.setRangeAxis(new NumberAxis("xxx"));
// Apparence en degrade violet + valeur affiche au centre dans la barre
BarRenderer barrenderer = new BarRenderer();
barrenderer.setSeriesPaint(0, new GradientPaint(0.0F, 0.0F, new Color(239, 239, 250), 0.0F, 0.0F, new Color(31, 31, 99)));
barrenderer.setBaseItemLabelsVisible(true);
barrenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
barrenderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.CENTER));
plot.setRenderer(barrenderer);
// Ajout du graph en forme de points pour les RA
plot.setRangeAxis(1, new NumberAxis("yyy"));
plot.setDataset(1, datasetRA);
// Pour le rendu des points, on veut afficher la valeur au dessus des points
LineAndShapeRenderer lineandshaperenderer = new LineAndShapeRenderer();
lineandshaperenderer.setBaseItemLabelsVisible(true);
lineandshaperenderer.setBaseItemLabelPaint(Color.red);
lineandshaperenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
lineandshaperenderer.setSeriesPaint(0, Color.red);
lineandshaperenderer.setLinesVisible(false);
plot.setRenderer(1, lineandshaperenderer);
plot.mapDatasetToRangeAxis(1, 1);
// Titre des ordonnees
plot.setDomainAxis(new CategoryAxis("Titre"));
// On definit que les points sont affiches sur l'histogramme (et pas derriere...)
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
// Affichage des points et des barres a la verticale
plot.setOrientation(PlotOrientation.VERTICAL);
// Affichage de la grille verticale
plot.setRangeGridlinesVisible(false);
// Affichage de la grille horizontale
plot.setDomainGridlinesVisible(false);
// Creaion du graphique avec les points
JFreeChart chart = new JFreeChart(titreGraphique, JFreeChart.DEFAULT_TITLE_FONT, plot, false);
// Fond de l'image => blanc
chart.setBackgroundPaint(Color.white);
// Ajout de la legende
chart.addLegend(new LegendTitle(plot));
// Enregistrer l'image
p_request.getSession().setAttribute(Constantes.IMG_HISTO, chart.createBufferedImage(800, 400)); |
Pb linux => dependance avec X11
Bon a priori j'ai trouvé...
L'api utilise par jFreeChart est dependante de X11.
Donc Xserver n'est pas lancé il y a un bug lors de la génération des graphs...
Ce que je ne comprends pas , c'est pourquoi je n'ai pas d'erreur dans mes logs ...
Voici les liens qui m'ont aidé à trouver la solution :
http://java.sun.com/products/java-me...ation_that_rea
http://www.jfree.org/phpBB2/viewtopi...1d6eb398078cad