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

Documents Java Discussion :

Rapport Jasper dans un fichier exécutable qui n'apparait plus


Sujet :

Documents Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Centrafrique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Points : 13
    Points
    13
    Par défaut Rapport Jasper dans un fichier exécutable qui n'apparait plus
    Bonjour les gars, je suis confronté à un vrai problème qui me casse la tête depuis bien longtemps.

    En fait j'utilise jasper pour créer des rapports que j'appelle ensuite dans mon programme java.

    Tout marche très bien avec le projet, au final, j'ai généré mon fichier .jar pour ensuite créer un exécutable avec lauch4j et innoSetup.

    Voilà une capture d'écran :
    Nom : jas.png
Affichages : 1285
Taille : 146,2 Ko

    Lorsque j'installe l'application finale sur mon PC, tout fonctionne à merveille mais maintenant, le problème est que sur un autre PC, rien ne vient, en d'autres termes, la capture d'écran précédente ne vient plus. Vraiment si j'ai pas trouvé la solution ici, c'est que c'est mort pour moi.

    Merci d'avance de votre aide.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Et t'as quoi comme message d'erreur?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Centrafrique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Il n'y a aucun message d'erreur en fait. C'est là la totale confusion.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Comment tu fait pour récolter tes messages d'erreurs? Si tu n'a rien, c'est probablement parce que tu ignore ces messages. Affiche tu bien systématiquement les erreurs dans tes catch? A quoi ressemble le code qui fait la génération? Tu as quoi comme résultat là où ça coince? Pas de fenêtre? Fenêtre vide?

  5. #5
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    "sur mon poste ça marche"
    "sur un autre poste ça ne marche plus"

    C'est typique d'un fichier placé sur le poste de développement en dehors du jar.
    Par exemple, le fichier "monRapport.jasper" est appelé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JasperReport jasperReport = (JasperReport)JRLoader.loadObject("C:/Users/Arthur/Documents/monRapport.jasper");
    Dans ce cas, tout fonctionne parfaitement en développement mais ne peut pas marcher sur un autre poste.

    Donc pour avancer:
    Tu nous montres le code qui appelle ton rapport jasper.

    Et puis comme l'a dit @tchize_ , il faut que tu prévoies un vrai log d'erreur dans un fichier
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Centrafrique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Ok, comme vous l'avez demandé, voici mon rapport d'erreurs constatées (en pièces jointes). Je sais pas si cela peut être d'une utilité. Selon ce que j'ai lu dans ce rapport d'erreurs, apparemment dans un de mes fichiers jasper, certaines librairies sont introuvables. Je ne sais pas pourquoi.

    Voici le code java (la fonction) que j'ai utilisé pour appeler le fichier jasper :

    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
     
            public static void file(int Rg, String path)
    	{
    		try {
    			HashMap<String, Object> params = new HashMap<>();
    			ArrayList<String> a = new ArrayList<>();
                            a.add(Rg + "");
    			params.put("paramRegistre", a);                                                
                            JasperDesign jd = JRXmlLoader.load(JRLoader.getFileInputStream(System.getenv("SystemDrive") + "/fls/APS" + path));                        
                            JasperReport report = JasperCompileManager.compileReport(jd);
    			JasperPrint print = JasperFillManager.fillReport(report, params, Connexion.myCon());
    			JFrame jf = new JFrame();
    			jf.getContentPane().add(new JRViewer(print));
    			jf.setLocationRelativeTo(null);
    			jf.setBounds(100, 100, 792, 593);
    			jf.setVisible(true);
                            jf.setExtendedState(jf.getExtendedState() | JFrame.MAXIMIZED_BOTH);
    		} catch (Exception e) {
                            JOptionPane.showMessageDialog(null, e.getMessage(),"Erreur",JOptionPane.ERROR_MESSAGE);
    //			e.printStackTrace();
    		}
    	}
    Fichiers attachés Fichiers attachés

  7. #7
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Au début du rapport, il n'arrive pas à lire une entrée du fichier zip
    il semble qu'en conséquence, il n'arrive pas à charger la bibliothèque jasper.

    As-tu essayé de lancer le jar sans qu'il soit empaqueté dans un exe ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Centrafrique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Oui oui, sur certains PC, l'application .jar génère très bien les fenêtres jasper mais sur d'autres PC, non non, rien ne s'affiche toujours.

  9. #9
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Dans ce cas, tu ne dois pas avoir le même log d'erreurs ?

    quand tu testes le jar, sur un poste, tu as bien copié toutes les lib qui vont avec je suppose ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Centrafrique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Non je n'ai pas inclus le dossier lib du projet, en fait, j'ai utilisé la méthode sur la capture d'écran suivante pour générer le .jar de l'application, incluant toutes les librairies externes utilisées.

    Nom : forjar.jpg
Affichages : 1149
Taille : 69,4 Ko

    Selon mes recherches, en générant un jar de cette manière, toute librairie incluse en fera partie automatiquement non!! Mais bon, je peux toutefois me tromper donc j'attend vos suggestions.

  11. #11
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Moui ... je vois où tu as été cherché cette solution. Je vais la tester à l'occasion.

    En attendant, tu peux essayer la compilation traditionnelle :
    clic-droit sur le projet et "Clean and build"

    Après il faut copier le dossier "dist" du projet sur le poste-cible
    et double-cliquer sur le jar dans le dossier dist.

    Si cela fonctionne partout c'est que tes ennuis viennent d'un mauvais assemblage
    avec la méthode "pakage-for-store".
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  12. #12
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Bon, je viens de tester le système "pakage-for-store" sur une application avec JasperRepport.
    C'est vrai que cela fonctionne et j'arrive bien à voir le rapport à l'écran.
    Donc les librairies supplémentaires JasperRepport sont bien chargées et utilisées par le jar.

    Il y a juste un point qui me dérange c'est que je n'arrive pas à ouvrir ce fameux jar pour vérifier son contenu. C'est une boîte noire mais bon ...
    En regardant la doc officielle d'Oracle, je vois que la modification à apporter au projet comporte (entre autres) ces lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     <zipgroupfileset dir="dist" includes="*.jar"/>
                <zipgroupfileset dir="dist/lib" includes="*.jar"/>
    ce qui veut dire qu'il faut impérativement faire un "Clean and Build" pour mettre à jour le "dist" AVANT de faire le "pakage-for-store"
    sinon, l'application générée ne correspond pas aux dernières modifications.

    Enfin comme "pakage-for-store" génère un fichier unique, je ne comprends pas bien l'intérêt de l’emballer dans un .EXE (qui semble ajouter des problèmes du coup ...)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Centrafrique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    J'ai lu tes trois post et essayé d'agir comme tu l'as suggéré mais toujours le même problème. En fait, sur d'autres forum, je lis les gens parler d'ajouter la bibliothèque jasper (.jar) au classpath.
    T'as une idée concernant ça? SI oui, guides moi. Merci.

  14. #14
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Si la bibliothèque n'est pas dans le dossier dist/lib de ton projet NetBeans alors ça ne peut pas marcher.
    Est-ce que tu as fait ton état avec le plug-in Jasper dans Netbeans ou bien avec Jasperstudio ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Centrafrique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    La librairie de jasperreports est bel et bien dans le dossier dist/lib et j'ai utilisé jasperstudio pour faire le rapport.

  16. #16
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Je n'avais pas vu ta modification du post du 14/10 dans laquelle tu mets le code.
    J'ai vu ces 3 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                            JasperDesign jd = JRXmlLoader.load(JRLoader.getFileInputStream(System.getenv("SystemDrive") + "/fls/APS" + path));                        
                            JasperReport report = JasperCompileManager.compileReport(jd);
    			JasperPrint print = JasperFillManager.fillReport(report, params, Connexion.myCon());
    Problème 1 (le plus important):
    Tu vas chercher le rapport dans le dossier "/fls/APS" + path
    C'est risqué car si le rapport n'est pas placé sur le disque exactement dans ces dossiers, cela ne marche pas.
    En principe cela fonctionne mais c'est une contrainte d'installation : à chaque installation il ne faut pas oublier de copier le rapport sur le poste-cible dans le dossier "/fls/APS".
    C'est peut-être ce qui s'est produit sur les autres postes où cela ne fonctionne pas.

    Solution qui te permet de dormir sur tes deux oreilles : embarquer le rapport dans le jar final.
    On suppose que ton rapport s'appelle monRapport.jrxml
    1) dans le projet NetBeans, SourcesPackages, tu crées un package "reports"
    2) tu copies ton rapport monRapport.jrxml dans le package "reports" (qui est en fait le dossier src\reports)
    3) tu remplaces les 3 lignes de ton code de chargement de rapport comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                InputStream is = getClass().getResourceAsStream("/reports/monRapport.jrxml");
                JasperDesign jd = JRXmlLoader.load(is);
                JasperReport report = JasperCompileManager.compileReport(jd);
                JasperPrint print = JasperFillManager.fillReport(report, params, Connexion.myCon());
    Conclusion : au lieu de charger monRapport.jrxml depuis un dossier quelque part sur le disque,
    le rapport est chargé avec getClass().getResourceAsStream depuis le jar ... et adieu le dossier "/fls/APS" !!


    Problème 2 (moins prioritaire):
    Tu charges un fichier jrxml pour faire un JasperDesign que tu dois ensuite compiler avec JasperCompileManager pour produire un JasperReport !
    C'est ce qui est proposé dans la plupart des docs qu'on trouve sur internet.

    En réalité, JasperStudio peut faire la compilation (voir le menu de JasperStudio) et produit un fichier compilé .jasper qui porte le même nom que le .jrxml
    Donc tu compiles une fois pour toute avec JasperStudio et cela améliore la performance de ton application qui n'est plus obligée de compiler à chaque fois que tu imprimes le rapport !

    Solution :
    On suppose que tu as compilé le rapport monRapport.jrxml avec JasperStudio et que tu as le fichier monRapport.jasper
    1) dans le projet NetBeans, SourcesPackages, tu crées un package "reports" si ce n'est pas déjà fait avec le point n°1
    2) tu copies ton rapport monRapport.jasper dans le package "reports"
    3) tu modifies les 3 lignes de ton code de chargement de rapport comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                URL url = getClass().getResource("/reports/monRapport.jasper");
                JasperReport jasperReport = (JasperReport) JRLoader.loadObject(url);
                JasperPrint print = JasperFillManager.fillReport(report, params, Connexion.myCon());
    Là, tu as un code plus léger !

    Il faut faire un "clean and build" avant de tester pour être sûr que NetBeans place bien le fichier dans le jar.

    Pour la petite histoire, on utilise un JasperDesign dans un programme si on doit faire des modifications "à la volé" dans le rapport.
    Là on boxe dans une autre catégorie car il faut bien maîtriser l'API de Jasper.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Centrafrique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Points : 13
    Points
    13
    Par défaut Ouf de soulagement
    Népomucène t'es un vrai chef toi. Vraiment merci de m'avoir aidé. C'est en fait ta deuxième proposition qui m'a finalement permis de sortir de l'impasse. Ahh je suis content enfin!!

  18. #18
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Bien content de t'avoir été utile !
    Embarquer un rapport Jasper dans une application est un classique en informatique de gestion.

    De mon côté, je ne connaissais pas cette possibilité de modifier le script d'ANT dans NetBeans pour mettre toutes les librairies dans le jar.
    J'ai donc bien profité aussi de ton post !!!
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

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

Discussions similaires

  1. Rajouter des informations dans un fichier word qui n'empèche pas son ouverture
    Par olysmar2 dans le forum Développement Office System
    Réponses: 0
    Dernier message: 14/05/2014, 14h32
  2. Réponses: 7
    Dernier message: 24/06/2013, 09h36
  3. Réponses: 6
    Dernier message: 15/02/2011, 16h22
  4. [XL-2007] Trouver un bout de code dans des fichiers Excel qui se trouve dans un répertoire
    Par Paloma dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/11/2010, 16h23
  5. Fichier exécutable qui ne s'exécute pas ?!
    Par bnadem35 dans le forum Linux
    Réponses: 4
    Dernier message: 12/07/2006, 11h35

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