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

WinDev Discussion :

Utiliser JavaExecuteFonction dans un (ou plusieurs) thread (s) [Généralités]


Sujet :

WinDev

  1. #1
    Membre actif
    Inscrit en
    Août 2005
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 96
    Points : 205
    Points
    205
    Par défaut Windev : JavaExecuteFonction dans un thread (s)
    Bonjour,

    Je viens de constater qu'il n'est pas possible de faire des appels à JavaExecuteFonction() dans un thread si JavaCharge() n'est pas appelée dans ce thread, ce qui constitue une limitation très pénalisante :

    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
     
    sRepBase est une chaîne = fRepExe()+"\Java\"
    sClassPath est une chaîne
    sClassPath = sRepBase+"test.jar"
     
    QUAND EXCEPTION DANS
     
        SI PAS JavaCharge(sClassPath) ALORS
            Trace("Erreur lors du chargement des fichiers .class")
        FIN
     
        ThreadExécute("Thread1",threadNormal,fonction1)
     
    FAIRE
        Trace(ExceptionInfo(errComplet))
    FIN
    Code de la fonction fonction1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sResult = JavaExécuteFonction("fr/test","helloWorld",javaChaîne,"helloWorld")
    SI sResult <> "<ACK/>" ALORS
        Info(sResult)
    FIN
    J'obtiens toujours cette erreur :
    Vous avez appelé la fonction JavaExécuteFonction.
    Vous devez appeler javaCharge avant javaExecute.

    Informations techniques

    Projet : Webcamp

    Dump de l'erreur du module <WD120JAV.DLL> <12.00Al>.

    - Appel WL :
    Traitement de <FenTest.PROCEDURE.fonction1>, ligne <25>, thread <0>
    Fonction <JavaExécuteFonction>, n° de syntaxe <0>

    - Niveau : erreur fatale (EL_FATAL)

    - Code erreur : 110005

    - Code erreur WD55 : 0

    - Pas de code d'erreur système

    - Pas de message d'erreur système

    - Que s'est-il passé ?
    Vous devez appeler javaCharge avant javaExecute.

    - Infos de debug :
    Fonction (11,2)

    - Infos attachées :
    EIT_PILEWL :
    Procédure locale fonction1 (FenTest.PROCEDURE.fonction1), ligne 25
    EIT_COMPOSANT :

    EIT_DATEHEURE : 10/07/2009 14:31:34

    - Identifiant dans le .err : 110005
    La chose se corse encore lorsqu'on souhaite utiliser JavaExecuteFonction() dans 2 threads s'exécutant en parallèle, en appelant JavaCharge() dans les threads, pour palier au problème précédent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ThreadExécute("Thread1",threadNormal,fonction1)
    ThreadExécute("Thread2",threadNormal,fonction2)
    Code de la fonction fonction1 : (Fonction fonction2 identique)

    ...
    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
     
    QUAND EXCEPTION DANS
     
        SI PAS JavaCharge(sClassPath) ALORS
            Trace("Erreur lors du chargement des fichiers .class")
        FIN
     
        sResult = JavaExécuteFonction("fr/test","helloWorld",javaChaîne,"helloWorld")
        SI sResult <> "<ACK/>" ALORS
            Info(sResult)
        FIN
     
    FAIRE
        Trace(ExceptionInfo(errComplet))
    FIN
    Ce coup ci, on obtient l'erreur suivante :
    Erreur à la ligne 20 du traitement Procédure locale fonction2.
    Vous avez appelé la fonction JavaCharge.
    Erreur lors de l'initialisation du classpath de la machine virtuelle Java.

    Informations techniques

    Projet : Webcamp

    Dump de l'erreur du module <WD120JAV.DLL> <12.00Al>.

    - Appel WL :
    Traitement de <FenTest.PROCEDURE.fonction2>, ligne <20>, thread <0>
    Fonction <JavaCharge>, n° de syntaxe <0>

    - Niveau : erreur fatale (EL_FATAL)

    - Code erreur : 110002

    - Code erreur WD55 : 0

    - Pas de code d'erreur système

    - Pas de message d'erreur système

    - Que s'est-il passé ?
    Erreur lors de l'initialisation du classpath de la machine virtuelle Java.

    - Infos de debug :
    Fonction (11,0)

    - Infos attachées :
    EIT_PILEWL :
    Procédure locale fonction2 (FenTest.PROCEDURE.fonction2), ligne 20
    EIT_COMPOSANT :

    EIT_DATEHEURE : 10/07/2009 14:38:10

    - Identifiant dans le .err : 110002
    Et oui ! On ne peut pas appeler JavaCharge() 2 fois de suite dans un même projet.

    Seul le code suivant fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SI PAS JavaCharge(sClassPath) ALORS
        Trace("Erreur lors du chargement des fichiers .class")
    FIN
     
    fonction1()
    fonction2()
    Quelle déception de constater ces limitations...

    Si quelqu'un à une solution de contournement du problème, c'est à dire pouvoir utiliser JavaExécuteFonction() dans 2 threads différents lancés en parallèle, je suis preneur.

    Merci d'avance et bonne programmation

  2. #2
    Membre actif
    Inscrit en
    Août 2005
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 96
    Points : 205
    Points
    205
    Par défaut Problème résolu
    Après signalement à PC-Soft, ce problème a été réglé dans Windev 15 dans la version 150056K.

    http://www.pcsoft.fr/st/telec/index.html

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour bastiencb,

    et merci pour le suivi de la discussion:
    Citation Envoyé par bastiencb Voir le message

    Si quelqu'un à une solution de contournement du problème, c'est à dire pouvoir utiliser JavaExécuteFonction() dans 2 threads différents lancés en parallèle, je suis preneur.
    Dans ton premier message, tu évoquais 2 limitations.
    Citation Envoyé par bastiencb Voir le message
    Je viens de constater qu'il n'est pas possible de faire des appels à JavaExecuteFonction() dans un thread si JavaCharge() n'est pas appelée dans ce thread, ce qui constitue une limitation très pénalisante :
    Citation Envoyé par bastiencb Voir le message
    Et oui ! On ne peut pas appeler JavaCharge() 2 fois de suite dans un même projet.
    Pourrais-tu nous dire quelle limitation a été levée par WD15 version 150056K?
    Merci.
    _

  4. #4
    Membre actif
    Inscrit en
    Août 2005
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 96
    Points : 205
    Points
    205
    Par défaut
    Ce code devrait fonctionner (Je n'ai pas retesté) :

    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
     
    sRepBase est une chaîne = fRepExe()+"\Java\"
    sClassPath est une chaîne
    sClassPath = sRepBase+"test.jar"
     
    QUAND EXCEPTION DANS
     
        SI PAS JavaCharge(sClassPath) ALORS
            Trace("Erreur lors du chargement des fichiers .class")
        FIN
     
        ThreadExécute("Thread1",threadNormal,fonction1)
        ThreadExécute("Thread2",threadNormal,fonction2)
     
    FAIRE
        Trace(ExceptionInfo(errComplet))
    FIN
    Par contre, on ne peut pas appeler JavaCharge() 2 fois de suite dans un même projet, ce qui n'est pas vraiment gênant du moment que l'on a chargé toutes les classes nécessaires à l'appel des fonctions Java un moment donné.

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

Discussions similaires

  1. [C] Utiliser system() dans un thread
    Par Jmtafam dans le forum Windows
    Réponses: 2
    Dernier message: 17/12/2007, 18h58
  2. [THREAD] WSAEventSelect dans plusieurs threads
    Par Invité dans le forum Visual C++
    Réponses: 3
    Dernier message: 05/03/2007, 14h41
  3. Thread -> Utiliser Synchronize() dans une fonction
    Par Futixu dans le forum C++Builder
    Réponses: 5
    Dernier message: 26/01/2007, 13h13
  4. Réponses: 17
    Dernier message: 03/06/2006, 03h29
  5. création de plusieurs threads dans WinMain
    Par ChidoriRasengan dans le forum DirectX
    Réponses: 1
    Dernier message: 15/06/2005, 21h36

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