Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Jasper
Jasper Forum d'entraide sur Jasper Reports. Avant de poster --> FAQ Jasper, Tutoriels Jasper
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/10/2005, 14h01   #1
Membre expérimenté
 
Avatar de nsanabi
 
Homme nabil nayd
Inscription : septembre 2003
Messages : 568
Détails du profil
Informations personnelles :
Nom : Homme nabil nayd

Informations forums :
Inscription : septembre 2003
Messages : 568
Points : 597
Points : 597
Envoyer un message via MSN à nsanabi
Par défaut [Java] Problème ClassPath

bonjour tout le monde
pour mon application j'ai cree des etats avec ireport
mais quand je les appelle depuis mon code java il y a erreur dans la methode fillReport
en fait il n'arrive pas à charger mon fichier .jasper
dans le forum on me dit que le fichier doit etre dans le class_path .
mais y auras pas des probleme quand je deploirais mon application??
pourtant j'ai bel et bien mis mon fichier.jasper dans le classpath et ça ne marche pas??
à ce que je sais le classpath est une variable d'environement que j'ai bien defini
si c pas ça comment connaitre le class path et comment le changer ??
est ce possible de mettre un chemain relatif dans mon code comme ça j'aurai pas à utiliser le classpath??
il se peut que ça soit pas ça le probleme qu'est ce que voulez que je dise ?? je suis perdu :
merci beaucoup pour votre aide
nsanabi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2005, 14h54   #2
Rédacteur
 
Avatar de elitost
 
Homme Eric REBOISSON
Consultant informatique
Inscription : septembre 2003
Messages : 2 032
Détails du profil
Informations personnelles :
Nom : Homme Eric REBOISSON
Âge : 34
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Consultant informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2003
Messages : 2 032
Points : 3 133
Points : 3 133
Envoyer un message via ICQ à elitost Envoyer un message via AIM à elitost Envoyer un message via MSN à elitost Envoyer un message via Yahoo à elitost Envoyer un message via Skype™ à elitost
C'est quoi ton erreur ?

Il n'y a pas de classpath, normalement c'est dans ton code que tu donne le chemin vers ton fichier non ?

Un bout de code ?
elitost est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2005, 15h58   #3
Membre expérimenté
 
Avatar de nsanabi
 
Homme nabil nayd
Inscription : septembre 2003
Messages : 568
Détails du profil
Informations personnelles :
Nom : Homme nabil nayd

Informations forums :
Inscription : septembre 2003
Messages : 568
Points : 597
Points : 597
Envoyer un message via MSN à nsanabi
oui si tu veut donne moi du code
merci
nsanabi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2005, 18h01   #4
Rédacteur
 
Avatar de elitost
 
Homme Eric REBOISSON
Consultant informatique
Inscription : septembre 2003
Messages : 2 032
Détails du profil
Informations personnelles :
Nom : Homme Eric REBOISSON
Âge : 34
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Consultant informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2003
Messages : 2 032
Points : 3 133
Points : 3 133
Envoyer un message via ICQ à elitost Envoyer un message via AIM à elitost Envoyer un message via MSN à elitost Envoyer un message via Yahoo à elitost Envoyer un message via Skype™ à elitost
lol...

Non , ton bout de code!!!
elitost est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2005, 03h26   #5
Membre expérimenté
 
Avatar de nsanabi
 
Homme nabil nayd
Inscription : septembre 2003
Messages : 568
Détails du profil
Informations personnelles :
Nom : Homme nabil nayd

Informations forums :
Inscription : septembre 2003
Messages : 568
Points : 597
Points : 597
Envoyer un message via MSN à nsanabi
mon code est comme tous les codes qu'on peut trouver sur le net.
Code :
1
2
3
 
JasperPrint etat=JasperManager.fillReport("fichier.jasper",hach,cn);
JasperViewer.viewReport(etat);
cn est une connection a la bd
hach est une Map vide car je ne donne pas de parametres

ça bug dans le fillReport dans JRLoader ou quelque chose comme àa

de toute faàon ce que je demande c est ce que je peut ecrire le chemain relatif de mon fichier .jasper ??
si je doit le mettre dans le classpath comment connaitre ce dernier sinon comment le definir
nsanabi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2005, 18h36   #6
Rédacteur
 
Avatar de elitost
 
Homme Eric REBOISSON
Consultant informatique
Inscription : septembre 2003
Messages : 2 032
Détails du profil
Informations personnelles :
Nom : Homme Eric REBOISSON
Âge : 34
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Consultant informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2003
Messages : 2 032
Points : 3 133
Points : 3 133
Envoyer un message via ICQ à elitost Envoyer un message via AIM à elitost Envoyer un message via MSN à elitost Envoyer un message via Yahoo à elitost Envoyer un message via Skype™ à elitost
Personnellement j'ai un code qui fonctionne comme ceci, ça ressemble au tient apparemment :

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
public class GeneratePDF {
 
    public static void main(String[] args) {
 
        // - Paramètres de connexion à la base de données
        String url = "jdbc:mysql://localhost/jasper_database";
        String login = "root";
        String password = "root";
 
        try {
            // - Connexion à la base
            Driver monDriver = new com.mysql.jdbc.Driver();
            DriverManager.registerDriver(monDriver);
            Connection connection = DriverManager.getConnection(url, login, password);
 
            // - Chargement et compilation du rapport
            JasperDesign jasperDesign = JRXmlLoader.load("D:\\iReport-0.5.1\\classic.jrxml");
            JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
 
            // - Paramètres à envoyer au rapport
            Map parameters = new HashMap();
            parameters.put("Titre", "Titre");
 
            // - Execution du rapport
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);
 
            // - Création du rapport au format PDF
            JasperExportManager.exportReportToPdfFile(jasperPrint, "D:\\iReport-0.5.1\\classic.pdf");
        } catch (JRException e) {
 
            e.printStackTrace();
        } catch (SQLException e) {
 
            e.printStackTrace();
        }
 
    }
}
Tu peux envoyer le log de l'erreur ?
elitost est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2005, 22h48   #7
Membre expérimenté
 
Avatar de nsanabi
 
Homme nabil nayd
Inscription : septembre 2003
Messages : 568
Détails du profil
Informations personnelles :
Nom : Homme nabil nayd

Informations forums :
Inscription : septembre 2003
Messages : 568
Points : 597
Points : 597
Envoyer un message via MSN à nsanabi
en fait ta façon de fair est tres gourmande en ressources car à chaque fois tu va compiler le fichier xml
vaut mieu compiler une fois et apres utiliser le fichier .jasper
pour le remplir de donnees non??
nsanabi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/10/2005, 15h46   #8
Rédacteur
 
Avatar de elitost
 
Homme Eric REBOISSON
Consultant informatique
Inscription : septembre 2003
Messages : 2 032
Détails du profil
Informations personnelles :
Nom : Homme Eric REBOISSON
Âge : 34
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Consultant informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2003
Messages : 2 032
Points : 3 133
Points : 3 133
Envoyer un message via ICQ à elitost Envoyer un message via AIM à elitost Envoyer un message via MSN à elitost Envoyer un message via Yahoo à elitost Envoyer un message via Skype™ à elitost
Oui, mais ma solution prend effectivement toutes les étapes...

Et en prenant ce code et en remplaçant par ton rapport ça donne quoi ?
elitost est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2005, 18h44   #9
Candidat au titre de Membre du Club
 
Inscription : mars 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 12
Points : 11
Points : 11
Par défaut Réponse problème classpath

salut nsanabi,

A ton problème, je répondrai ceci.
Par souci de portabilité des applications sur les différents OS, definir le classpath dans la variable d'environnement CLASSPATH (sous windows) n'est pas le must.
Lors d'un déploiement java nous permet d'empaqueter nos bytecode dans un fichier jar. Celui-ci possède un fichier d'auto- description appelé manifest.mf (un simple fichier texte est suffisant).
Il suffit de définir dans ce fichier ceci:
Class-Path: chemin des bibliothèques.
Main-Class: classe principale contentenant la méthode void main

Pour le chemin des bibliothèques, je te conseille d'utiliser un chemin relatif pour assurer la portabilité. Tu pourrais par exemple copier toutes les bibliothèques jars dans le même dossier ou se trouve le fichier jar de ton application

Lors de l'exécution de ce fichier jar la JVM va positionnée dynamiquement la variable classpath correspondant au chemin spécifié dans le manifest.

Dans ton cas, tu dois spécifier dans le manifest tous les fichiers jars (ensembles des jars jasperreports) nécéssaire à l'exécution de ton état .

Au cours mes tests sur ireport j'ai réalisé une petite appli avec netbeans et ireport et maxdb.
voilà mon fichier manifest.mf:
Code :
1
2
3
4
5
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.2
Created-By: 1.5.0_01-b08 (Sun Microsystems Inc.)
Class-Path: sapdbc.jar
Main-Class: com.brainsoft.GestHotelLaunch
voila le code de ma fenêtre principale:

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
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
package com.brainsoft;
import com.brainsoft.form.*;
import com.brainsoft.util.ApercuEtat;
import java.awt.Dimension;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
/**
 *
 * @author  yannick
 */
public class GestHotel extends javax.swing.JFrame {
    Connection conn ;
    String chaineUrl ;
 
    /** Creates new form FenPrincipale */
    public GestHotel() {
        initComponents();
      //  pack();
    }
 
    private void jMenuItemListeVilleActionPerformed(java.awt.event.ActionEvent evt) {                                                    
// TODO add your handling code here:
   try{
      Class.forName("com.sap.dbtech.jdbc.DriverSapDB");
      chaineUrl =new String("jdbc:sapdb:///HOTELDB");
      conn = DriverManager.getConnection(chaineUrl,"MONA","RED");
 
        InputStream ficListeVilles = getClass().getResourceAsStream("/res/ListeVilles.jasper");    
        ApercuEtat apercuListeVilles = new ApercuEtat(JasperFillManager.fillReport(ficListeVilles,null,conn));
 
 
 
        apercuListeVilles.setVisible(true);
   }catch (SQLException e){
       System.out.println("Erreur SQL : " + e);
    }catch (JRException e){ 
        System.out.println("Erreur Jasper : " + e);
    }catch (ClassNotFoundException e){    
        System.out.println("Erreur classe non trouvée: " + e);
    }
    } 
 
    /** This method is called from within the constructor 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() {
        menuBar = new javax.swing.JMenuBar();
        jMenuQuitter = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        jMenuFormulaire = new javax.swing.JMenu();
        jMenuItemFormCity = new javax.swing.JMenuItem();
        jMenuEtat = new javax.swing.JMenu();
        jMenuItemListeVille = new javax.swing.JMenuItem();
        jMenuAide = new javax.swing.JMenu();
        contentMenuItem = new javax.swing.JMenuItem();
        aboutMenuItem = new javax.swing.JMenuItem();
 
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Gestion Hotel");
        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        setMinimumSize(new Dimension(800,600));
        setPreferredSize(new Dimension(800,600));
        jMenuQuitter.setText("Quitter");
        jMenuItem1.setText("Bye ! Bye !");
        jMenuItem1.setToolTipText("Quitter le formulaire");
        jMenuItem1.setName("jMenuItemQuitter");
        jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem1ActionPerformed(evt);
            }
        });
 
        jMenuQuitter.add(jMenuItem1);
 
        menuBar.add(jMenuQuitter);
 
        jMenuFormulaire.setText("Formulaire");
        jMenuFormulaire.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuFormulaireActionPerformed(evt);
            }
        });
 
        jMenuItemFormCity.setText("Les Cit\u00e9s");
        jMenuItemFormCity.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemFormCityActionPerformed(evt);
            }
        });
 
        jMenuFormulaire.add(jMenuItemFormCity);
 
        menuBar.add(jMenuFormulaire);
 
        jMenuEtat.setText("Etat");
        jMenuItemListeVille.setText("Liste des villes");
        jMenuItemListeVille.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemListeVilleActionPerformed(evt);
            }
        });
 
        jMenuEtat.add(jMenuItemListeVille);
 
        menuBar.add(jMenuEtat);
 
        jMenuAide.setText("Aide");
        contentMenuItem.setText("Contents");
        jMenuAide.add(contentMenuItem);
 
        aboutMenuItem.setText("About");
        jMenuAide.add(aboutMenuItem);
 
        menuBar.add(jMenuAide);
 
        setJMenuBar(menuBar);
 
    }
    // </editor-fold>                        
 
    private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
// TODO add your handling code here:
          System.exit(0);
    }                                          
 
 
 
    private void jMenuItemFormCityActionPerformed(java.awt.event.ActionEvent evt) {                                                  
     FormCity oFormCity = new FormCity() ;
     //oFormCity.setLocationRelativeTo(oFormCity.getParent());
     oFormCity.setVisible(true);
 
   // TODO add your handling code here:
    }                                                 
 
    private void jMenuFormulaireActionPerformed(java.awt.event.ActionEvent evt) {                                                
// TODO add your handling code here:
    }                                               
 
 
    // Variables declaration - do not modify                     
    private javax.swing.JMenuItem aboutMenuItem;
    private javax.swing.JMenuItem contentMenuItem;
    private javax.swing.JMenu jMenuAide;
    private javax.swing.JMenu jMenuEtat;
    private javax.swing.JMenu jMenuFormulaire;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JMenuItem jMenuItemFormCity;
    private javax.swing.JMenuItem jMenuItemListeVille;
    private javax.swing.JMenu jMenuQuitter;
    private javax.swing.JMenuBar menuBar;
    // End of variables declaration                   
 
}
voila le code de la fenêtre d'affichage d'un état: ApercuEtat . Cette fenêtre utilise le JPanel d'affichage prédéfini de jasperreports: JRViewer.
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
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
 
package com.brainsoft.util;
 
import java.awt.Dimension;
import java.sql.Connection;
import java.sql.SQLException;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.view.JRViewer;
 
/**
 *
 * @author  yannick
 */
public class ApercuEtat extends javax.swing.JFrame {
 
    /**
     * Creates new form ApercuEtat
     */
 
    public ApercuEtat(JasperPrint jrPrint) {
        try {
 
            jPanelApercu = new JRViewer(jrPrint);
            getContentPane().add(jPanelApercu, java.awt.BorderLayout.CENTER);
            initComponents();
 
        }catch (JRException e ){
 
        }
    }
    public ApercuEtat(JasperPrint jrPrint , String titreEtat) {
        try {
            jPanelApercu = new JRViewer(jrPrint);
            getContentPane().add(jPanelApercu, java.awt.BorderLayout.CENTER);
            initComponents();
            setTitle(titreEtat);
        }catch (JRException e ){
 
        }
    }    
    public ApercuEtat(java.io.InputStream is, boolean isXML) {
        try {
            jPanelApercu = new JRViewer( is,isXML);
            getContentPane().add(jPanelApercu, java.awt.BorderLayout.CENTER);
            initComponents();
        }catch (JRException e ){
 
        }
    }
 
        public ApercuEtat(java.io.InputStream is, boolean isXML , String titreEtat) {
        try {
            jPanelApercu = new JRViewer( is,isXML);
            getContentPane().add(jPanelApercu, java.awt.BorderLayout.CENTER);
            initComponents();
            setTitle(titreEtat);
        }catch (JRException e ){
 
        }
    }
    public ApercuEtat(java.lang.String fileName, boolean isXML) {
        try{
            jPanelApercu = new JRViewer(fileName, isXML);
            getContentPane().add(jPanelApercu, java.awt.BorderLayout.CENTER);
            initComponents();
        }catch (JRException e ){
 
        }
    }
 
        public ApercuEtat(java.lang.String fileName, boolean isXML ,String titreEtat) {
        try{
            jPanelApercu = new JRViewer(fileName, isXML);
            getContentPane().add(jPanelApercu, java.awt.BorderLayout.CENTER);
            initComponents();
             setTitle(titreEtat);
        }catch (JRException e ){
 
        }
    }
    /** This method is called from within the constructor 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() {
 
        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Aper\u00e7u");
        setLocationByPlatform(true);
        setMinimumSize(new Dimension(800,600));
        setPreferredSize(new Dimension(800,600));
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                formWindowClosing(evt);
            }
        });
 
        pack();
    }
    // </editor-fold>                        
 
    private void formWindowClosing(java.awt.event.WindowEvent evt) {                                   
// TODO add your handling code here:
        getContentPane().remove(jPanelApercu);
        jPanelApercu=null;
        System.gc();
    }                                  
 
    /**
     * @param args the command line arguments
     */
 
 
    // Variables declaration - do not modify                     
    // End of variables declaration                   
    private JRViewer  jPanelApercu;
}
voilà la stucture de mes fichiers :

-build
.... - classes
........-com
........... -brainsoft
................. +form
................. +util
................. GestHotel.class
................. GestHotelLaunch.class
........+lib (contient les jar nécéssaires de jasperreports)
........-res
.............ListeVilles.jasper


voilà

Je tiens aussi à ajouter qu'avec jbuilder la gestion des bibliothèques est encore plus facile car il suffit d'inclure le contenu de chaque bibliothèque jar nécéssaire dans le jar de votre application .Ainsi plus besoin de définir Class-Path dans le manifest,seule le tag Main-Class est nécéssaire pour pouvoir exécuter le jar .

Allez bye, j'espère que ce petit code te seras utile
mijoya est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h08.


 
 
 
 
Partenaires

Hébergement Web