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

Entrée/Sortie Java Discussion :

[JNI] Problème dû aux threads Java


Sujet :

Entrée/Sortie Java

  1. #1
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut [JNI] Problème dû aux threads Java
    Bonjour,

    Dans mon appli, je dois utiliser une dll fournie par un partenaire. J'ai donc utilisé JNI, et codé ma dll wrapper.

    Mon problème est qu'en fait dans mon programme, j'ai cette structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    1er Thread Java {
       Accés à la dll => création d une arborescence sous Java
       Récupération du noeud sélectionné
       2nd Thread Java {
          Accés à la dll => récupération des données relatives au noeud sélectionné
       }
    }
    Le problème est que j'ai des crash dû à l'imbrication des threads : "La mémoire ne peut pas être 'read'."
    Les méthodes de la dll accèdent à un fichier et récupèrent des données dans ce fichier.
    J'ai testé plusieurs modes de relecture, et à un moment ou à un autre, j'ai un crash (dépend des manip, de l'imbrication des threads ou du système d'exploitation).
    Si j'enlève les Threads, je n'ai plus de problème.

    Est-il possible de combiner threads Java et JNI ?
    Est-ce qu'il faut faire quelque chose de particulier pour que cela fonctionne correctement ? (mutex, ou autre)

  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
    Met tes parties ne pouvant pas être exécutées en même temps en exclusion mutuelle... (?)

  3. #3
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Ben en fait, y'a pas de parties "incompatibles".
    J'ai plus l'impression que c'est la méthode de récupération de données dans les fichiers (codée dans la dll qu'on me fournit) qui "perd le fil" quand j'utilise un thread.
    Une des personne m'ayant fourni la dll m'a envoyé ce lien pour tenter d'expliquer ce qui se passe.

    Mais j'espère qu'il existe une solution pour résoudre le problème...

  4. #4
    Membre confirmé Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Points : 465
    Points
    465
    Par défaut
    je crois que l'idée est de recoder la dll en java si elle est codée en C. Selon le livre que j'utilise fréquemment, la référence sur JNI donne le schéma de recompilation des librairie C. En gros il faudrait les sources.

  5. #5
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Citation Envoyé par broumbroum
    je crois que l'idée est de recoder la dll en java si elle est codée en C. Selon le livre que j'utilise fréquemment, la référence sur JNI donne le schéma de recompilation des librairie C. En gros il faudrait les sources.
    Euh non, pas glop comme solution.
    L'intérêt d'utiliser cette dll c'est d'être évolutif sans avoir à modifier notre code. Tout changement du mode de relecture sera codé par les fournisseurs de la dll, qui nous fournira une nouvelle version de la dll, qui fonctionnera directement avec notre appli, sans que l'on ait à écrire la moindre ligne de code.

    En gros, on VEUT utiliser leur dll, reste juste à savoir comment faire pour que tout fonctionne

  6. #6
    Membre confirmé Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Points : 465
    Points
    465
    Par défaut
    Et l'encodage des caractères ne va pas être un obstacle??? Bref, c'est compliqué comme procédé non?

  7. #7
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Citation Envoyé par broumbroum
    Et l'encodage des caractères ne va pas être un obstacle??? Bref, c'est compliqué comme procédé non?
    Non, il existe des méthodes dans JNI permettant de passer de chaînes de caractères Java en chaînes de caractère C, et vice-versa.

    Et je pense que si cette API (je parle de JNI) existe, c'est qu'il y a une bonne raison : on ne peut pas toujours se permettre de recoder une dll en Java, soit par manque de temps, soit par manque de moyen (sources indisponibles, etc).
    Dans mon cas, c'est par manque de temps, et pour assurer la compatibilité ascendante avec le type de fichier à relire via la dll.

Discussions similaires

  1. Code JNI et thread Java
    Par grunk dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 23/02/2015, 17h06
  2. [JNI] Problème de threads
    Par romainromain dans le forum C
    Réponses: 0
    Dernier message: 03/08/2009, 10h06
  3. [JNI] Problème SWIG java.lang.UnsatisfiedLinkError
    Par Julien.M dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 20/09/2007, 16h15
  4. Problème threads java
    Par idjou dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 08/06/2007, 15h48
  5. [PROFILER][THREAD][java.prof] outil gratuit/complet?
    Par narmataru dans le forum Général Java
    Réponses: 11
    Dernier message: 16/11/2005, 12h28

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