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

Delphi Discussion :

[D6][Java]Probleme avec JNI sur LoadVM();


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Par défaut [D6][Java]Probleme avec JNI sur LoadVM();
    Bonjour,

    Nous venons d'acheter au boulot un produit de WorkFlow qui fourni des APIS en Java et je voudrait attaquer ce logiciel avec Delphi.

    Pour attaquer ces APIS, je suis entrain de me pencher sur la JNI traduite en Delphi.
    Le souci est que je suis bloqué au moment de LOADER la VM. J'ai une erreur -1: Unknow error ...

    Je vous met un petit bout de code pour illustrer :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
       JVM := TJavaVM.Create;
          // Set up the options for the VM
       FillChar(Options, SizeOf(Options), #0);
       Options[0].optionString := '-D java.class.path=.';
     
       VM_args.version := JNI_VERSION_1_4;
       VM_args.options := @Options;
       VM_args.nOptions := 1;
       VM_args.ignoreUnrecognized := JNI_TRUE;
     
     
       Errcode := JVM.LoadVM(VM_args);
     
       if Errcode < 0 then
       begin
          if Errcode = JNI_EEXIST then
          begin
             MessageDlg(Format('Virtual machine already loaded, error code = %d', [Errcode]), mtError, [mbOK], 0);
             Exit;
          end
          else
          begin
             MessageDlg(Format('Error loading JavaVM, error code = %d', [Errcode]), mtError, [mbOK], 0);
             Exit;
          end;
       end;
     
     
       JEnv := TJNIEnv.Create(JVM.Env);
    Mon erreur est je pense au niveau de la ligne 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Options[0].optionString := '-D java.class.path=.';
    Pourriez-vous m'expliquer a quoi sert cette ligne ?
    Je me doute que c'est le chemin ou se trouvent les classes de l'outil que je vais attaquer mais ..?
    Que dois-je y trouver ? des .class, des .jar .???


    Merci d'avance.

    z3ro.

  2. #2
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    oui l'option -D de la machine virtuelle est l'option qui permet de definir des variables systeme :

    Citation Envoyé par java.exe
    -D<name>=<value> set a system property
    De par la syntaxe et mes souvenirs plutot vagues, je pense qu'il ne faut pas mettre d'espace :

    apres, le nom de la variable m'etonne .... j'aurais plutot opté pour un CLASS_PATH qui est le nom de la variable d'environnement utilisé par java pour trouver les classes (ie chemins des bibliotheques en delphi)
    mais bon, c'est peut etre une variable differente, lié a une utilisation JNI.

    Ensuite, si c'est bien un chemin de recherche des classes, peut importe qu'elle soit JAR ou CLASS. en fait il va rechercher les 2
    Le JAR et le CLASS c'est un peu les BPL et les DCU de java
    le JAR est une archive ZIP renommé.

    Pour exemple, on creer un programme avec pleins de sous repertoires (packages) pour regroupper les classes selon des themes.
    l'execution des classes via la machine virtuelle java s'execute d'une certaine maniere.
    Une fois compilé en JAR (enfin, zippé en JAR) le processus d'execution est strictement le meme sauf que l'on a precisé a la JRE que l'execution se fera au travers d'uen arborescence compressé dans un JAR et non en brut sur le HDD. Sinon c'est pareil.

    Je suis debutant en JAVA mais j'aime bien bidouiller le code via notepad++ et la compilation en ligne de commande. Ca m'a appris certaines choses a ce niveau la

  3. #3
    Membre confirmé

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Par défaut
    Merci pour cette reponse Clorish.

    J'ai essayé un peu dans tous les sens pour le -Djava.class.path=..
    Le point veut dire que j'inclus le Application.ExeName en gros dans les chemins de recherche.

    Question : Je suis obligé d'inclure un chemin pour mes classes ??
    Le but de cette question est d'isoler si le probleme vient bien de cette commande ou tout simplement de la JNI ou de la machine virtuelle installée sur mo poste ...

    Merci

  4. #4
    Membre confirmé

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Par défaut
    Ok, bon en fait j'avais copié je ne sais pas pourquoi la dll JVM.DLL a la racine de mon projet et mon programme chargeait celle la.
    Forcement, elle doit dependre de moulte autres DLL donc ca marchait pas.

    La j'ai retirer la DLL et hop ca roule.

    Merci encore pour vos reponses !

  5. #5
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    de rien

    mais faut voir le class path comme etant la liste des chemins d'acces au librairies. exectement comme les chemins de recherches d'un projet delphi (ou les chemins de bibliotheques). Ces derniers sont separés par un ";"

    le chemin "." est un peu particulier car il designe le reperoire d'execution.
    Dans ton cas : Est ce celui de la JVM ou de l'applciation Delphi ?
    le plus sur est de donner un chemin d'acces complet, quitte a le generer a partir de la variable application.exename.

    Sinon une alternative serait de definir une variable d'environnement (ou de la completer) avec les chemins d'acces aux libraires. De cette maniere tu ne devrais plus avoir a specifier d'option "-D"

  6. #6
    Membre confirmé

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Par défaut
    Effectivement, j'ai remplacer le "." par le chemin d'accés au .jar du logiciel que je veux attaquer.

    J'ai egalement specifier dans la variable PATH system le chemin de la JVM en premier. Comme ca je suis sur de taper au bon endroit !

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

Discussions similaires

  1. [Oracle] Probleme avec ora_parse sur un SELECT
    Par thomasjcj dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 24/11/2008, 14h50
  2. 3D en Java. Problème avec les textures !
    Par dotrungtien dans le forum Moteurs 3D
    Réponses: 4
    Dernier message: 07/04/2006, 20h43
  3. Problème avec write sur fichier
    Par telescan dans le forum Linux
    Réponses: 8
    Dernier message: 13/12/2005, 17h09
  4. [GTK]problème avec GTK+ sur DEV-C++
    Par afrikha dans le forum Dev-C++
    Réponses: 7
    Dernier message: 01/10/2005, 15h13
  5. Debutant en JAVA, problème avec 1er programme
    Par Gymerus dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 07/09/2005, 13h10

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