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 :

Comment attraper une exception ?


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 95
    Points : 67
    Points
    67
    Par défaut Comment attraper une exception ?
    Bonjour voila j'ai un problème. Lorsque j'utilise mon programme pour numériser un document, si je choisit trop de DPI comme paramêtre de scanner le programme plante. J'obtient ce message sous Eclipse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Exception in thread "Thread-2" java.lang.OutOfMemoryError : Java hep space
    J'aimerais pouvoir attrapé cette exception pour éviter que le programme se bloque entièrement mais comment faire sachant que je ne sais pas quelle méthode la lance ? j'ai essayé de mettre un try catch autour de la méthode "acquisition()" et aussi autour du "new programme()" permettant de lancer mon programme . Mais rien à faire... qu'en pensez-vous ? ??? merci

  2. #2
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par ionix
    Bonjour voila j'ai un problème. Lorsque j'utilise mon programme pour numériser un document, si je choisit trop de DPI comme paramêtre de scanner le programme plante. J'obtient ce message sous Eclipse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Exception in thread "Thread-2" java.lang.OutOfMemoryError : Java hep space
    J'aimerais pouvoir attrapé cette exception pour éviter que le programme se bloque entièrement mais comment faire sachant que je ne sais pas quelle méthode la lance ? j'ai essayé de mettre un try catch autour de la méthode "acquisition()" et aussi autour du "new programme()" permettant de lancer mon programme . Mais rien à faire... qu'en pensez-vous ? ??? merci
    Les "Error" ne sont pas faites pour être attrapées...
    De toute façon dès que tu as cette erreur, le programme s'arrête normalement...

  3. #3
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par ®om
    Les "Error" ne sont pas faites pour être attrapées...
    C'est tout à fait vrai... mais cela reste possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try {
                // methode qui alloue beaucoup de mémoire
            } catch (OutOfMemoryError error) {
                error.printStackTrace();    
            }
    Mais cela reste dangereux dans une application multithread (et une application graphique est forcément multithread), car l'exception peut survenir sur un autre thread, ce qui peut au final bloqué ton application...

    a++

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 95
    Points : 67
    Points
    67
    Par défaut
    Bon j'ai mis des try catch partout même aux endroits inutils ... pour vous dire...


    ®om il faut savoir que le programme ne s'arrête pas .. il continue de tourner sauf qu'il est important pour moi d'attraper cette exception.

    Il dois y avoir un moyen de toute façon ma maman m'a dit que toutes les exceptions peuvent être attrapées pour contourner l'erreur ou bien afficher son propre message d'erreur


    et sinon je veux bien mettre un try catch(OutOfMemoryError) mais où ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 95
    Points : 67
    Points
    67
    Par défaut
    adiGuba à écrit :
    a++
    Reviens !!

  6. #6
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ionix
    et sinon je veux bien mettre un try catch(OutOfMemoryError) mais où ?
    C'est justement le problème : cette exception peut survenir n'importe où !
    Donc en mono-thread c'est simple à gérer mais pas en multi-thread...

    La meilleure solution est de se débrouiller pour que cela n'arrive pas (en réservant plus de mémoire à java, ou en vérifiant les données avant traitement)

    a++

  7. #7
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    [MODE hocazou ON]

    en réservant plus de mémoire à java
    à ajouter dans les paramètres de la JVM
    (defini la mémoire MAX allouée à la JVM)

    -Xmx256m

    (pour 256 Mo, mais 64m pour 64 Mo etc)

    [MODE hocazou OFF]
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 95
    Points : 67
    Points
    67
    Par défaut
    Merci pour vos réponses et explications c'est super simpa.

    En allouant plus de mémoire à la machine virtuelle il est vrai que ça marche... mais d'un côté si j'alloue 256mo et que le type numérise une image en 10000000 DPI il va y avoir l'exception... je trouve que c'est un peu du "bricolage", non ?

  9. #9
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,
    Citation Envoyé par ionix
    Merci pour vos réponses et explications c'est super simpa.

    En allouant plus de mémoire à la machine virtuelle il est vrai que ça marche... mais d'un côté si j'alloue 256mo et que le type numérise une image en 10000000 DPI il va y avoir l'exception... je trouve que c'est un peu du "bricolage", non ?
    En même temps c'est un exemple extrème ...

    Pour pailler à ce probleme, tu définis une constante a 256 (comme la memoire alouée) et si l'image dépasse cette taille-un pallier(reservé a l'appli, genre 50mo quelque chose comme ça), tu renvoie un joli message d'erreur à ton utilisateur en lui disant gentillement que l'image est trop grosse

    c'est un autre bricolage qui peut regler le probleme

    bien à toi

    mavina
    Développeur Java / Flex à Shanghai, Chine
    mes publications
    Mon dernier tutoriel : Messages Quit IRC : explications

    La rubrique IRC recrute des redacteurs : contactez moi

    Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 95
    Points : 67
    Points
    67
    Par défaut
    Rebonjour, je me suis plongé pas mal de temps sur le problème et malgré vos conseils je n'ai toujours pas résolu mon problème.

    Pourtant j'ai transformé mon application en monothread mais à mon avis le problème vient des fonctions natives (j'utilise JTwain). Ce sont certainement elles qui renvoient l'erreur et pas possible de les attraper même en les entourant d'un try {}catch.

    Ensuite la solution aurait été biensur d'empècher l'utilisateur de mettre 10 000 DPI mais je ne vois pas non plus comment faire sachant que je ne peux pas savoir ce qu'il paramêtre car ces modifications de paramêtres s'effectuent sur son propre logiciel TWAIN.
    Pour combler ce problème il aurait fallu que j'ai + de fonctions natives à ma disposition. En effet, je n'ai aucune fonctions natives me permettant de modifier le nombre de DPI etc...

    J'espère m'être bien expliqué...

  11. #11
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    La solution je pense est de ne pas tout stocker en ram...
    Tu te fais un buffer en ram de par exemple 2 048 pixels... Et dès que tu attends 2048 tu stockes dans un fichier...

    Imagine sinon si tu mettais tout en ram quand tu encodes un film o_O

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut
    Bonjour, je me permet de remonter ce sujet pour une question toute bête : comment forcer la numérisation a une résolution donnée (par exemple 150 ppp) ?

    Merci d'avance.

  13. #13
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2004
    Messages : 138
    Points : 125
    Points
    125
    Par défaut
    Quel API utilise tu ?

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut
    J'utilise JTwain aussi avec des fonctions natives.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut
    Personne pour m'aider à trouver ?

    Je ne trouve que très peu d'informations sur internet sur JTwain

  16. #16
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut
    Salut,

    Merci pour les liens même si je crois que je n'y ai pas vraiment compris grand chose

    Il faut que j'implemente une méthode dans le jtwain.cpp et que je génère une nouvelle dll alors si j'ai bien compris ?

    Vu que mes connaissances en c++ son assez limitées, si quelqu'un l'a déjà eu fait, ses connaissances et conseils seraient d'un aide précieuse. Ou si quelqu'un peut m'aider tout court...

    Merci beaucoup.

  18. #18
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    bon, je crois que quelqu'un l'a déjà fait...
    http://today.java.net/pub/a/today/2004/11/18/twain.html
    Dans son code natif, il fait apparaître une boîte de dialogue où on peut selectionner la résolution
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut
    J'avais vu, mais c'est en c la boîte de dialogue qui permet de seletionner la résolution sur cette page.

    Je vais essayer d'extraire le code et de l'adapter mais c'est pas gagné :/

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut
    Cette fenetre est en fait lié au drivers twain, drivers qui changent selon le scanner utilisé, donc je ne peux pas utiliser cette fenêtre ni le code puisque les scanners ont tous leur drivers particuliers.

    Je n'avance pas sur ce problème, ca me deséspère

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/01/2007, 19h45
  2. Comment résoudre une exception?
    Par mambo dans le forum Visual C++
    Réponses: 11
    Dernier message: 28/08/2006, 14h48
  3. Réponses: 3
    Dernier message: 11/08/2006, 16h46
  4. Réponses: 2
    Dernier message: 28/08/2003, 00h00

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