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

Langage Java Discussion :

Sous Netbeans OK, en jar KO


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Par défaut Sous Netbeans OK, en jar KO
    Bonjour, j'écris ce topic car mes recherches restent infructueuses. Voici mon problème :
    Lorsque j'exécute mon programme sous netbeans, tout se passe bien, mais une fois en jar, le programme s'arrête et je ne trouve pas la raison. Voici le code :
    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
     
    public MenuBar (Context context) {
            this.context = context;
            initListMenus(context);
            this.setBackground(Color.white);
        }
     
        public void initListMenus (Context context) {
            //create main menus
            menus = new JMenu[menuTitles.length];//menus creation with tittle
            for (int i=0; i<menuTitles.length; i++) {
                JMenu menu = new JMenu(menuTitles[i]);//menus creation with tittle
                menu.setFont(new Font("SansSerif", Font.BOLD, 13));
                menu.setForeground(Color.BLACK);
                menus[i] = menu;
                this.add(menus[i]);
            }
            //client menu
            menus[0].add(new MenuItem(new SelectCustomerFunctionnality(context)));
            menus[0].add(new MenuItem(new CreateCustomerFunctionnality(context)));
            menus[0].add(new MenuItem(new UpdateCustomerFunctionnality(context)));
            JMenu consultor = new JMenu("Consulteur");
            consultor.add(new MenuItem(new CreateConsultorFunctionnality(context)));
            consultor.add(new MenuItem(new SelectConsultorFunctionnality(context)));
            consultor.setIcon(
                    new ImageIcon("annexes/ressources/pictures/icones/consultorM.png"));
            //consultor.add(new MenuItem(new WebAccessFunctionnality(context)));
            menus[0].add(consultor);
            JMenu contact = new JMenu("Contact");
            contact.add(new MenuItem(new CreateContactFunctionnality(context)));
            contact.add(new MenuItem(new SearchContactFunctionnality(context)));        
            contact.setIcon(
                    new ImageIcon("annexes/ressources/pictures/icones/contactM.png"));
            menus[0].add(contact);
            menus[0].add(new MenuItem(new ExitFunctionnality()));
    DisplayQuestion.yesNo("0 ?","20");//C'est une JOptionPane
            //recherche menu
     
            menus[1].add(new MenuItem(new SearchBoxFunctionnality(context)));//c'est ici que ça coince
            DisplayQuestion.yesNo("0 ?","21");
            menus[1].add(new MenuItem(new SearchFamilyFunctionnality(context)));
            DisplayQuestion.yesNo("0 ?","22");
            menus[1].add(new MenuItem(new SearchContainerFunctionnality(context)));
            DisplayQuestion.yesNo("0 ?","23");
            menus[1].add(new MenuItem(new SearchLocationFunctionnality(context)));
            DisplayQuestion.yesNo("0 ?","30");
            JMenu historic = new JMenu("Historique");
            historic.add(new MenuItem(new SearchOutputFunctionnality(context)));
            historic.add(new MenuItem(new SearchInputFunctionnality(context)));
            historic.add(new MenuItem(new SearchDestroyingFunctionnality(context)));
            historic.add(new MenuItem(new SearchMovedBoxesFunctionnality(context)));
            historic.setIcon(
                    new ImageIcon("annexes/ressources/pictures/icones/searchM.png"));
            menus[1].add(historic);
            menus[1].add(new MenuItem(new SearchByBarCodeFunctionnality(context)));
     
            menus[2].add(new MenuItem(new CreateBoxFunctionnality(context)));
            menus[2].add(new MenuItem(new SelectBoxFunctionnality(context)));
            menus[2].add(new MenuItem(new ImportFunctionnality(context)));
            JMenu famille = new JMenu("Famille");
            famille.add(new MenuItem(new CreateFamilyFunctionnality(context)));
            famille.add(new MenuItem(new SelectFamilyFunctionnality(context)));
            DisplayQuestion.yesNo("0 ?","100");
            famille.setIcon(
                    new ImageIcon("annexes/ressources/pictures/icones/familyM.png"));
            JMenu transfert = new JMenu("Transfert");
            transfert.add(new MenuItem(new FamiliesMergingFunctionnality(context)));
            transfert.add(new MenuItem(new BoxesTransfertFunctionnality(context)));
            transfert.setIcon(
                    new ImageIcon("annexes/ressources/pictures/icones/transfertM.png"));
            famille.add(transfert);
            menus[2].add(famille);
     
            menus[3].add(new MenuItem(new ContaineringFunctionnality(context)));
            menus[3].add(new MenuItem(new ContaineringSelectionFunctionnality(context)));
            menus[3].add(new MenuItem(new LocationningFunctionnality(context)));
     
            menus[4].add(new MenuItem(new CreateOutputFunctionnality(context)));
            menus[4].add(new MenuItem(new CreateInputFunctionnality(context)));
            menus[4].add(new MenuItem(new CreateDestroyFunctionnality(context)));
    DisplayQuestion.yesNo("0 ?","200");
            JMenu listOf = new JMenu("Liste des...");
            listOf.add(new MenuItem(new PrintListBoxesFunctionnality(context)));
            listOf.add(new MenuItem(new PrintListFamiliesFunctionnality(context)));
            JMenu containers = new JMenu("Conteneurs");
            containers.add(new MenuItem(new PrintListContainersByCustomerFunctionnality(context)));
            containers.add(new MenuItem(new PrintListContainersByLocationFunctionnality(context)));
            containers.setIcon(
                    new ImageIcon("annexes/ressources/pictures/icones/printM.png"));
            listOf.add(containers);
            listOf.add(new MenuItem(new PrintListLocationsFunctionnality(context)));
            listOf.setIcon(
                    new ImageIcon("annexes/ressources/pictures/icones/printM.png"));
            menus[5].add(listOf);
    DisplayQuestion.yesNo("0 ?","300");
            JMenu logistic = new JMenu("Etiquettes");
            logistic.add(new MenuItem(new PrintLabelBoxFunctionnality(context)));
            logistic.add(new MenuItem(new PrintLabelContainerFunctionnality(context)));
            logistic.setIcon(
                    new ImageIcon("annexes/ressources/pictures/icones/barcode.png"));
            menus[5].add(logistic);
            menus[5].add(new MenuItem(new PrintInventoringSheetFunctionnality(context)));
     
            JMenu location = new JMenu("Emplacement");
            location.add(new MenuItem(new CreateLocationFunctionnality(context)));
            location.add(new MenuItem(new UpdateLocationFunctionnality(context)));
            location.setIcon(
                    new ImageIcon("annexes/ressources/pictures/icones/locationM.png"));
            menus[6].add(location);
            JMenu staff = new JMenu("Personnel");
            staff.add(new MenuItem(new CreateStaffFunctionnality(context)));
            staff.add(new MenuItem(new UpdateStaffFunctionnality(context)));
            DisplayQuestion.yesNo("0 ?","400");
            staff.setIcon(
                    new ImageIcon("annexes/ressources/pictures/icones/staff.png"));
            menus[6].add(staff);
            menus[6].add(new MenuItem(new StatisticsFunctionnality(context)));
            menus[6].add(new MenuItem(new DeleteCustomerFunctionnality(context)));
            menus[6].add(new MenuItem(new DestroyedBoxesFunctionnality(context)));
            menus[6].add(new MenuItem(new DeletedBoxesFunctionnality(context)));
            menus[6].add(new MenuItem(new NeverBackBoxesFunctionnality(context)));
        }
    Pour que vous puissiez mieux voir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public SearchBoxFunctionnality(Context context) {
            super("Boite", new Shortcut(), "search", new SearchBoxFrame(context));
        }
     
        @Override
        public boolean isAllowed() {
            Staff s = getContext().getCurrentStaff();
            if (s != null)
                return s.getService().equals(Staff.ADMINISTRATION) ||
                        s.getService().equals(Staff.EXPLOITATION) ||
                        s.getService().equals(Staff.COMMERCIAL);
            else return false;
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class SearchBoxFrame extends AbstractFrame {
     
        public SearchBoxFrame(Context context) {
            super(context);
            DisplayQuestion.yesNo("0 ?","SBF");//n'apparait pas
        }
     
        @Override
        public void launch() {
            this.controller = new SearchBoxController(context, this);
            this.view = new SearchBoxView(controller);
        }

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 144
    Par défaut
    bonjour
    je ne vois pas de méthode main permettant de lancer le programme, le problème ne viendrait-il pas de ça ?
    je ne connais pas netbean mais peut être te cache t-il la manière dont le code est lancé...

  3. #3
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut AR
    Ce problème arrive très souvent pour la raison suivante : l'utilisation de fichiers ou ressources externes.

    Ici, tu place des chemin absolu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new ImageIcon("annexes/ressources/pictures/icones/consultorM.png")
    donc forcément ton JAR n'arrivera a tout les coups pas à trouver ce fameux PNG. Pour que tes images et autres ressources soient exportés avec ton JAR, il faut utiliser le système des ressources.

    Crée un source folder "icones" dans ton projet et place-y toutes tes images, ensuite, accède à ces images par un "getClass().getRessource()" (ou quelque chose dans ce style, pu très sûre de tête

    Avec cela tu seras débarrassé des chemin absolu. Et si pour une raison ou une autre tu as besoin absolument d'utiliser un chemin absolu, arrange toi pour partir de la racine, histoire que ton JAR ne soit pas dépendant du dossier dans lequel il se trouve.

    Il n'y a plus qu'a...


    EDIT : ce sera certe un problème mais en fait je ne pense pas que cela fasse planter ton programme, tes images ne s'affiront juste pas. Donc ceci est àcorrigé dans ton code, mais ce n'est probablement pas la cause principale de ton souci.

    Pour l'histoire de main de coco-sup, cela peu en effet poser problème au lancement d'un JAR... mais il me parrait aussi très surprenant que Netbeans ne te dise rien et te laisse éxecuter un programme dénué de "main()"...

    Dernière chose, comment crée tu ton JAR ? Car sous Netbeans il me semble qu'il suffit d'aller le chercher après avoir Build l'application dans un dossier.

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Par défaut
    Bonjour, merci pour vos réponses.

    A coco-sup, je n'ai pas représenté le main pour ne pas mettre trop de code. Il est évident qu'il y en avoir un...

    A michon, il est vrai que ce problème aurait pu venir de la, je mettrais en place cette méthode. Cependant, après cette ligne en question, le programme continue à s'éxécuter car DisplayQuestion.yesNo("0 ?","20"); s'affiche bien à l'écran.
    Ce ne sont donc pas les problèmes...

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Lances le jar en ligne de commande et jette un œil à l'exception que tu as...


    a++

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Par défaut
    A adiGuba, j'avais essayé de le lancer direct. Il le lance et mais passe à la ligne. Sinon, en mettant java devant j'ai :
    Exception in thread "main" java.lang.NoClassDefFoundError: dist\Winarch/jar
    Caused by: java.lang.ClassNotFoundException: dist\Winarch.jar
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    Could not find the main class: dist\Winarch.jar. Program will exit.

    Je précise que sans je mot java le programme se lance. Peut-être il manque quelque chose dans le classpath.

    J'ai également essayé de mettre un try-catch dans lequel j'ai mis mon instruction critique afin de levé une Exception et l'écrire sur une JOptionPane, mais rien.

    J'ai tout de même localisé l'endroit :
    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
     
    public class SearchBoxFrame extends AbstractFrame {
     
        public SearchBoxFrame(Context context) {
            super(context);
            DisplayQuestion.yesNo("0 ?","SBF");//ne s'affiche pas
        }
     
        @Override
        public void launch() {
            this.controller = new SearchBoxController(context, this);
            this.view = new SearchBoxView(controller);
        }
    }
     
     
    public abstract class AbstractFrame {
        protected AbstractController controller;
        protected AbstractView view;
        protected Context context;
     
        public AbstractFrame (Context context) {
            this.context = context;
            //DisplayQuestion.yesNo("88", "AbstractFrame");
        }
    }

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Pour lancer un jar en ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -jar LeNomDuJar.jar

    Je suppose que tu es sous Windows. Par défaut les jar sont lancé avec javaw qui ne possèdent pas de console...


    a++

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

Discussions similaires

  1. ajouter package (en .jar) sous Netbeans
    Par zarzisiano dans le forum NetBeans
    Réponses: 1
    Dernier message: 14/06/2009, 23h30
  2. Créer un jar executable sous netbeans
    Par racoboss dans le forum NetBeans
    Réponses: 4
    Dernier message: 04/12/2007, 16h11
  3. Image ne s'affiche pas en executant un .jar | Sous NetBeans
    Par Pierrers dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 20/03/2007, 12h49
  4. Réponses: 9
    Dernier message: 19/03/2006, 13h17
  5. [NetBeans] Faire un "Mount" d'un jar sous Netbeans 4.0
    Par itechparadise dans le forum NetBeans
    Réponses: 1
    Dernier message: 18/05/2005, 22h28

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