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 de la fonction fonction1 :
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
J'obtiens toujours cette erreur :
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
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 :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
Code de la fonction fonction1 : (Fonction fonction2 identique)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ThreadExécute("Thread1",threadNormal,fonction1) ThreadExécute("Thread2",threadNormal,fonction2)
...
Ce coup ci, on obtient l'erreur suivante :
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
Et oui ! On ne peut pas appeler JavaCharge() 2 fois de suite dans un même projet.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
Seul le code suivant fonctionne :
Quelle déception de constater ces limitations...
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()
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
Partager