Précédent   Forum du club des développeurs et IT Pro > Java > Développement Web en Java > Applets
Applets Vos questions sur les Applets
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 10/07/2009, 16h20   #1
Zavonen
Rédacteur
 
Avatar de Zavonen
 
Inscription : novembre 2006
Messages : 1 757
Détails du profil
Informations personnelles :
Âge : 65

Informations forums :
Inscription : novembre 2006
Messages : 1 757
Points : 1 705
Points : 1 705
Par défaut Graphique JFreeChart dans Applet

Bonjour à tous,
Je travaille sous système Linux ubuntu Jaunty-9.04
Mon EDI est Netbeans 6.5.1
Je souhaite inclure des graphiques JFreeChart dans mes applets.
J'ai lu la doc, cela n'a pas l'air très compliqué, et j'ai fait un premier essai:
Voici le code:
Code java :
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
 
/*
 * fibonacci.java
 *
 * Created on 10 juil. 2009, 07:31:03
 */
/**
 *
 * @author gilles
 */
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.LinkedList;
 
public class fibonacci extends java.applet.Applet {
 
    DefaultCategoryDataset dataset;
    JFreeChart chart;
    String serie1 = "u(n+1)=u(n)+u(n-1)";
    LinkedList indicesi = new LinkedList();
    LinkedList indicess = new LinkedList();
    int curindex;
 
    private double fibonacci(int n) {
        if (n == 0) {
            return 1;
        }
        if (n == 1) {
            return 1;
        }
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
 
    /** Initializes the applet defsuites1 */
    public void init() {
        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {
 
                public void run() {
                    initComponents();
                }
            });
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        this.setSize(600, 400);
        dataset = new DefaultCategoryDataset();
        curindex = 1;
        for (int i = 0; i < curindex; i++) {
            indicesi.add(i);
            indicess.add("" + i);
            dataset.addValue(fibonacci((Integer) indicesi.get(i)), serie1, (String) indicess.get(i));
        }
        chart = ChartFactory.createBarChart("Visualisation suite de Fibonacci", "indice n", "u(n)", dataset, PlotOrientation.VERTICAL, true, true, false);
 
        chart.setAntiAlias(true);
 
 
 
    }
 
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        if (chart != null) {
            chart.draw((Graphics2D) g, getBounds()); //repaints the whole chart
        }
        jToolBar1.repaint();
    }
 
    /** This method is called from within the init() method to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {
 
        jToolBar1 = new javax.swing.JToolBar();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
 
        jToolBar1.setRollover(true);
 
        jButton1.setText("Rec.");
        jButton1.setFocusable(false);
        jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jButton1MouseClicked(evt);
            }
        });
        jToolBar1.add(jButton1);
 
        jButton2.setText("Suiv.");
        jButton2.setFocusable(false);
        jButton2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton2.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jButton2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jButton2MouseClicked(evt);
            }
        });
        jToolBar1.add(jButton2);
 
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(318, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap(278, Short.MAX_VALUE)
                .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
    }// </editor-fold>
 
    private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {                                      
        // TODO add your handling code here:
        int i = curindex;
        indicesi.add(i);
        indicess.add("" + i);
        dataset.addValue(fibonacci((Integer) indicesi.get(i)), serie1, (String) indicess.get(i));
        curindex++;
        repaint();
    }                                     
 
    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
        // TODO add your handling code here:
        indicesi.clear();
        indicess.clear();
        dataset.clear();
        curindex = 1;
        for (int i = 0; i < curindex; i++) {
            indicesi.add(i);
            indicess.add("" + i);
            dataset.addValue(fibonacci((Integer) indicesi.get(i)), serie1, (String) indicess.get(i));
        }
        repaint();
 
    }                                     
 
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JToolBar jToolBar1;
    // End of variables declaration
}
Dans l'appletviewer de l'EDI cela marche parfaitement.
Maintenant quand je veux lancer l'applet depuis un fichier html, en reprenant directement le code généré.
Code html :
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
<HTML>
<HEAD>
   <TITLE>Applet HTML Page</TITLE>
</HEAD>
<BODY>
 
<!--
*** GENERATED applet HTML launcher - DO NOT EDIT IN 'BUILD' FOLDER ***
 
If you need to modify this HTML launcher file (e.g., to add applet parameters), 
copy it to where your applet class is found in the SRC folder. If you do this, 
the IDE will use it when you run or debug the applet.
 
Tip: To exclude an HTML launcher from the JAR file, use exclusion filters in 
the Packaging page in the Project Properties dialog.
 
For more information see the online help.
-->
 
<H3><HR WIDTH="100%">Applet HTML Page<HR WIDTH="100%"></H3>
 
<P>
<APPLET codebase="classes" code="fibonacci.class" width=350 height=200></APPLET>
</P>
 
<HR WIDTH="100%"><FONT SIZE=-1><I>Generated by NetBeans IDE</I></FONT>
</BODY>
</HTML>
Dans le répertoire 'classes' il y a les 4 fichiers générés suivants:
fibonacci.class
fibonacci$1.class
fibonacci$2.class
fibonacci$3.class
Tout cela a été généré automatiquement.
Cela ne fonctionne plus !
La console java me donne les erreurs suivantes:
Citation:
Java Plug-in 1.6.0_13
Utilisation de la version JRE 1.6.0_13 Java HotSpot(TM) 64-Bit Server VM
Répertoire d'accueil de l'utilisateur = /home/gilles
----------------------------------------------------
c: effacer la fenêtre de la console
f: finaliser les objets de la file d'attente de finalisation
g: libérer la mémoire
h: afficher ce message d'aide
l: vider la liste des chargeurs de classes
m: imprimer le relevé d'utilisation de la mémoire
o: déclencher la consignation
q: masquer la console
r: recharger la configuration des politiques
s: vider les propriétés système et déploiement
t: vider la liste des threads
v: vider la pile des threads
x: effacer le cache de chargeurs de classes
0-5: fixer le niveau de traçage à <n>
----------------------------------------------------


java.lang.NoClassDefFoundError: org/jfree/data/category/CategoryDataset
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.newInstance0(Class.java:326)
at java.lang.Class.newInstance(Class.java:308)
at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:2838)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1380)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: org.jfree.data.category.CategoryDataset
at sun.plugin2.applet.Applet2ClassLoader.findClass(Applet2ClassLoader.java:151)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 8 more
Caused by: java.io.FileNotFoundException: /home/gilles/NetBeansProjects/analyse_reelle/defsuites1/build/classes/org/jfree/data/category/CategoryDataset.class (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileInputStream.<init>(FileInputStream.java:66)
at sun.net.http://www.protocol.file.FileURLConn...ection.java:70)
at sun.net.http://www.protocol.file.FileURLConn...ction.java:161)
at sun.plugin2.applet.Applet2ClassLoader.getBytes(Applet2ClassLoader.java:468)
at sun.plugin2.applet.Applet2ClassLoader.access$000(Applet2ClassLoader.java:46)
at sun.plugin2.applet.Applet2ClassLoader$1.run(Applet2ClassLoader.java:126)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin2.applet.Applet2ClassLoader.findClass(Applet2ClassLoader.java:123)
... 11 more
Exception : java.lang.NoClassDefFoundError: org/jfree/data/category/CategoryDataset
J'en conclus qu'il manque des .class ou des .jar quelque part. Cela fonctionne en développement parce que j'ai ajouté à l'EDI les librairies, les sources, les javadoc, mais pas en production.
Quelqu'un peut-il me dire ce que je dois ajouter et où. S'il s'agit de fichiers à compiler, vous seriez aimable de me donner la manip à faire.
Merci d'avance.
__________________
Ce qu'on trouve est plus important que ce qu'on cherche.
Maths de base pour les nuls (et les autres...)
Zavonen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2009, 17h34   #2
Zavonen
Rédacteur
 
Avatar de Zavonen
 
Inscription : novembre 2006
Messages : 1 757
Détails du profil
Informations personnelles :
Âge : 65

Informations forums :
Inscription : novembre 2006
Messages : 1 757
Points : 1 705
Points : 1 705
Je me réponds à moi-même, je viens de trouver la solution.
Pour tous ceux que cela peut intéresser.
Décompacter les jar de JCommon et JFreeChart
Mélanger les 2 contenus des répertoires /org/jfree de chaque jar dans un répertoire unique org/jfree, mettre ce répertoire à côté des classes compilées par netbeans et ça fonctionne.
Pour une raison que j'ignore il fait les recherches là et pas ailleurs.
Ouf !!!
__________________
Ce qu'on trouve est plus important que ce qu'on cherche.
Maths de base pour les nuls (et les autres...)
Zavonen est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/11/2010, 10h37   #3
Talcris
Invité de passage
 
Laurent Ory
Inscription : décembre 2009
Messages : 2
Détails du profil
Informations personnelles :
Nom : Laurent Ory

Informations forums :
Inscription : décembre 2009
Messages : 2
Points : 1
Points : 1
Citation:
Envoyé par Zavonen Voir le message
Je me réponds à moi-même, je viens de trouver la solution.
Pour tous ceux que cela peut intéresser.
Décompacter les jar de JCommon et JFreeChart
Mélanger les 2 contenus des répertoires /org/jfree de chaque jar dans un répertoire unique org/jfree, mettre ce répertoire à côté des classes compilées par netbeans et ça fonctionne.
Pour une raison que j'ignore il fait les recherches là et pas ailleurs.
Ouf !!!

Merci beaucoup à toi !
Ca faisait bien 2 mois que j'étais bloqué avec le même soucis !!

Le problème vient visiblement du chargement des .jar par l'applet, il ne considère qu'une fois chaque "path" (org/jfree/...) et donc ne charge que jcommon OU que jfreechart ...

Enfin voilà, encore merci
Talcris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2012, 01h47   #4
MissX
Invité de passage
 
Inscription : août 2012
Messages : 1
Détails du profil
Informations forums :
Inscription : août 2012
Messages : 1
Points : 1
Points : 1
Merciiiiiiiiiii beaucoup ça fait longtemps que je cherche la solution Merciiiii
MissX est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h42.


 
 
 
 
Partenaires

Hébergement Web