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

Eclipse Java Discussion :

Différence entre package par défaut Eclipse et package créé


Sujet :

Eclipse Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Différence entre package par défaut Eclipse et package créé
    Salut,

    je developpe une petite appli en java sur Eclipse. Cette appli utilise JMF et pour mieux comprendre, je me suis inspiré des exemples dispo sur le site d'oracle. Donc pour faire mes tests, j'ai créé un nouveau projet et ai placé les sources dans le package par défaut, j'ai fais mes tests et modifié le tout. Quand j'ai eu un resultat satisfaisant, j'ai voulu rapatrier mes sources dans mon vrai projet. Et dans mon projet, mes sources sont placées dans un packaqe que j'ai crée (d'une manière tout à fait classique). Et là mon code ne renseigne pas d'erreur, mais n'affiche plus la meme chose que dans le projet de test. Pour info, il s'agit de capturer une webcam, d'enregistrer le flux dans un fichier et le convertir en h264. Dans le projet de test, on affiche l'image en meme temps qu'on l'enregistre, puis quand l'enregistrement est fini, on affiche dans un deuxieme panel la video qu'on vient d'enregistrer, alors que la cam courante s'affiche toujours dans la premiere. Et donc dans le vrai projet, on enregistre bien le fichier, et on le lit bien quand il est fini, mais la cam courante ne s'affiche plus. Apres avoir testé mon code dans tous les sens sans succes, j'ai décider d'inserer le code original de l'exemple pour voir comment ça se passe. Pareil, la cam courante ne s'affiche pas. je crée donc un nouveau projet, j'y place mes sources dans le package par defaut, et là tout fonctionne, je crée un package et je met les sources dedans, ça ne va plus!!!
    donc pour moi le probleme vient du fait que je ne suis plus dans le package par defaut. Mais j'aimerai comprendre ce qui coince. quelle est la difference entre le package par defaut (pourtant deconseille par eclipse) et un package créé à la main??? merci

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 562
    Points : 21 625
    Points
    21 625
    Par défaut
    L'endroit où il se trouve.
    Un package est aussi un répertoire qui contient ses classes, ses fichiers .java, et ses sous-packages.
    Normalement ça ne devrait pas changer quoi que ce soit, sauf si on cherche les ennuis.


    Edit : je suis un abruti. J'avais complètement oublié la visibilité.

  3. #3
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Les classes dans le package par défaut ne sont plus accessible dans tous les autres packages.

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour Andry,

    et tu sais comment les rendre accessible? C'est peut etre un probleme lié à eclipse. J'ai même créé un projet où j'ai une copie de mes sources dans deux packages, une dans le package par defaut, une dans un package nommé. Et là on voit bien que le code ne fonctionne correctement que dans le package par defaut...

    C'est donc fort bien un probleme de visibilté, d'où ma question, peut on donner à une classe nommée la meme visibilité et les memes (possibles) propriétés que le package par defaut?

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par masterskp3 Voir le message
    et tu sais comment les rendre accessible? C'est peut etre un probleme lié à eclipse.
    C'est java qui ne le permet pas, c'est pas eclipse. D'autant plus que c'est moche de créer des classes dans le pacquage par défaut.

    A+.

  6. #6
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Bonjour.

    Tu a déclaré une clause package correcte dans tes classes?

    Tes classes ont bien été mises dans une structure de répertoire correspondante au package?

  7. #7
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Salut deadpool,

    oui bien sûr:

    package BE.monPackage ;

    en tête de chage source. Mais de toute manière eclipse l'a fait automatiquement.
    créer projet -> puis créer Package -> puis créer mes classes dedans...


    Mais de toute maniere, j'ai créé un projet test avec mes sources en double dedans, une copie dans le package par defaut, et une copie dans BE.monPackage. Seule la version dans le package par defaut fonctionne correctement. Et la seule difference entre les fichiers, c'est la premiere ligne du fichier (package BE.monPackage

    ça me parait incomprehensible, car il n'y a pas d'erreur dans le code, il se passe exactement le meme phenomene quand je prends les sources d'exemple de chez oracle et que je copie colle...

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Crées un nouveau projet et met toutes les classes dans de package, lance ensuite le programme et dit nous les erreurs de compilation ou erreur d'exécution qu'il donne.

    A+.

  9. #9
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Y'a forcément une erreur quelque part.

    Y'a pas moyen que tu nous affiche un minim de code reproduisant le problème?

    Est ce que par hasard tu ne fera pas un truc du style dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try{
     
     
    }catch(Exception e){
    }
    Auquel cas, les éventuelles erreurs seraient masquées.

  10. #10
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Je mettrai du code demain car mes sources sont au bureau, mais il y a 4 fichiers...

    Sinon je n'ai pas d'erreur de compilation, et au final, le programme fais presque tout ce que je lui demande.

    - J'ai une fenetre avec deux panel.
    - Sur le panel de gauche, j'affiche le flux de ma webcam.
    - Lorsque je clique sur un bouton, j'enregistre le flux dans un fichier MOV, et je le converti en MP4 H264.
    - Quand c'est fini, le fichier qui vient d'etre enregistré est lu sur le panel de droite, alors que celui de gauche continue à afficher la webcam courante...

    ça, c'est quand tout va bien. Quand ça coince, le panel de gauche n'affiche rien du tout. pourtant j'enregistre bien la cam dans un fichier, je fais la compression mp4, et quand c'est fini, la video est bien lue sur le panel de droite.

    Donc finalement, il n'y a pas grand chose qui coince, mais pas facile de se filmer quand on voit pas ce qu'on filme...

    Je tiens à dire que je suis relativement novice en java...

  11. #11
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Comme ca, la raison que je vois qui pourrait ne pas faire d'erreur de compilation et changer en fonction du package, c'est l'utilisation de la reflexion avec une classe en dur et dont l'exception serait masquée.
    S'il n'y a que 4 fichiers, tu peux les poster pour voir ?

  12. #12
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Voilà,

    sur le zip vous trouverez le code d'exemple de chez oracle, qui se comporte exactement comme mon appli (puisque je m'en suis inspiré). Pour que ça fonctionne, placez les sources dans le package par defaut, pour que ça plante, placez les dans un package nommé...
    Fichiers attachés Fichiers attachés

  13. #13
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 562
    Points
    562
    Par défaut
    Comme le disait à juste titre Deadpool, il y a dans le code des gestions d'exception sans traitement, des try/catch sans code dans le catch ou avec un return...

    4 dans MonitorStream.java et 1 dans CaptureUtil.java...

    Je pense que le problème devrait s'éclaircir tout seul et que tu devrais avoir l'exception provoquée (probablement une IOException)
    en mettant des e.printStackTrace() dans chacun des catch de l'appli avec package...

  14. #14
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    merci kox2ee,

    je vais tester et tenir au courant. Mais il y a du neuf, je suis en train de tester le meme code que vous (donc l'original) sur netbeans, et là netbeans crée lui meme le package, et j'ai des erreurs dans toutes mes classes car elles ne se voient pas entre elles... erreurs non signalées dans eclipse.

  15. #15
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bon, je vais tout passer en debug car le traitement des exceptions ne donne rien du tout.

  16. #16
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bon et bien merci pour vos conseils, j'ai finalement trouvé:

    il suffisait de remplacer
    MonitorControl mc = (MonitorControl)datasource.getControl("MonitorStream");

    par

    MonitorControl mc = (MonitorControl)datasource.getControl("monPackage.MonitorStream");

    c'etait donc bien un probleme de visibilité...

    merci à tous

  17. #17
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Ca ne correspond pas au code du zip que tu as donné. Dans celui-ci, on voit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonitorControl mc = (MonitorControl)datasource.getControl("jmfsample.MonitorStream");
    Mais bon, le principe est le meme. C'est d'ailleurs tres moche d'avoir utilisé le nom de la classe complet en dur.
    Et pour reprendre ce que tu dis, ce n'est pas un probleme de visibilité. C'est simplement que la string est testée dans la fonction getControl...
    Que tes classes soient dans le package par défaut ou bien un autre, elles se voient entre elles de la meme maniere (tant qu'elles sont toutes dans le meme package). La visibilité n'entre en jeu que si tu avais des classes dans un autre package qui utiliseraient celles-ci. Et encore, ca, ca provoque une erreur de compilation, pas une erreur d'execution.

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

Discussions similaires

  1. Création de classes sous Eclipse et package par defaut
    Par Invité dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 09/07/2013, 10h37
  2. Réponses: 3
    Dernier message: 04/11/2007, 22h31
  3. ProblemView selection de categorie par défaut(Eclipse 3.2)
    Par gama2ee dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 05/09/2007, 10h40
  4. Réponses: 2
    Dernier message: 12/04/2007, 14h14
  5. Réponses: 4
    Dernier message: 13/02/2007, 10h08

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