IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Jasper Discussion :

[Java] Problème ClassPath


Sujet :

Jasper

  1. #1
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    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

  2. #2
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    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 ?

  3. #3
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    oui si tu veut donne moi du code
    merci

  4. #4
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    lol...

    Non , ton bout de code!!!

  5. #5
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    mon code est comme tous les codes qu'on peut trouver sur le net.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Personnellement j'ai un code qui fonctionne comme ceci, ça ressemble au tient apparemment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  7. #7
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    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??

  8. #8
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Oui, mais ma solution prend effectivement toutes les étapes...

    Et en prenant ce code et en remplaçant par ton rapport ça donne quoi ?

  9. #9
    Membre à l'essai
    Profil pro
    Chargé IT
    Inscrit en
    Mars 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chargé IT

    Informations forums :
    Inscription : Mars 2005
    Messages : 12
    Points : 17
    Points
    17
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/04/2013, 10h18
  2. Problème task java et classpath
    Par damien77 dans le forum ANT
    Réponses: 1
    Dernier message: 17/05/2009, 17h07
  3. [JAVA] Problème supression noeud d'un document XML
    Par vero59 dans le forum XML/XSL et SOAP
    Réponses: 10
    Dernier message: 16/08/2005, 16h12
  4. [TOMCAT-ECLIPSE] Problème classpath !
    Par VoD dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 22/11/2004, 11h34
  5. [Eclipse][Java]Problème de compilation sur CTRL+S
    Par ZeKiD dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 27/05/2004, 11h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo