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] '.' expected


Sujet :

Entrée/Sortie Java

  1. #1
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 23
    Par défaut [JNI] '.' expected
    J'ai un problème dont la solution doit certainement être toute simple, mais qui me bloque depuis pas mal de temps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >javac SetSampleRate.java
    SetSampleRate.java:4: '.' expected
    import PaHostApiInfo;
                        ^
    Voici le début de SetSampleRate.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    import PaHostApiInfo;
     
    class SetSampleRate 
    {
    ...
    PaHostApiInfo est une autre classe qui se trouve dans le répertoire courant (je n'utilise pas de paquetage), et dont voici le début :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class PaHostApiInfo
    {
    ...
    A priori, il est autorisé d'importer des classes publiques situées dans le même répertoire non ? Je ne comprends pas l'erreur.

  2. #2
    Membre éprouvé Avatar de XristofGreek
    Inscrit en
    Août 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 164
    Par défaut
    A priori, il est autorisé d'importer des classes publiques situées dans le même répertoire non ? Je ne comprends pas l'erreur.
    oui je crois que tu as raison mais il est aussi vrai que tu n'as donc pas besoin de la ligne qui pose problème puisque çà se fait automatiquement. Je pense que tu peux l'enlever et çà compilera.
    Juste pour info tu utilises quel JDK ?

  3. #3
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    Bonjour


    Tu n'a pas besoin d'importer une classe du même package que la classe depuis laquelle tu effectues l'import.
    Tu ne peux pas importer une classe qui est dans le package par défaut.

    Bon courage

  4. #4
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 23
    Par défaut
    Voilà quand j'enlève la ligne concernée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >java SetSampleRate
    Exception in thread "main" java.lang.NoSuchMethodError: PaHostApiInfo
            at SetSampleRate.GetAPIDevicesInfos(Native Method)
            at SetSampleRate.main(SetSampleRate.java:16)
    J'utilise J2SDK 1.4.2

  5. #5
    Membre éprouvé Avatar de XristofGreek
    Inscrit en
    Août 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 164
    Par défaut
    et PaHostApiInfo est bien compilée ?

  6. #6
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Pourrais-tu nous montrer un peu de ton code (à priori celui de la méthode SetSampleRate.GetAPIDevicesInfos et de la méthode SetSampleRate.main)
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  7. #7
    Membre expérimenté Avatar de @ldehan
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 215
    Par défaut
    fait voir ton main

  8. #8
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 23
    Par défaut
    Oui, je pense que le problème vient peut être du constructeur qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public PaHostApiInfo(int structVersion, int type, String name, int deviceCount, int defaultInputDevice, int defaultOutputDevice)
    alors que lorsque je fais appel à cette classe, c'est de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private native static PaHostApiInfo[] GetAPIDevicesInfos(int size);
    public static void main(String args[])
    {
        int size = GetHostAPICount();
        PaHostApiInfo info[] = new PaHostApiInfo[size];
    parce que je voudrais pouvoir déclarer un tableau sans l'allouer tout de suite (je ne connais pas encore les arguments pour le constructeur).

  9. #9
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Est-ce qu'ensuite tu instancies bien chaque élement du tableau ?
    A quoi correspond la ligne 16 de ton SetSampleRate.java, à priori il s'agit d'un appel à la méthode GetAPIDevicesInfos depuis le main et il semblerait que ce sois là que ça coince.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  10. #10
    Membre éprouvé Avatar de XristofGreek
    Inscrit en
    Août 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 164
    Par défaut
    attends là si je ne me trompe pas :

    PaHostApiInfo info[] = new PaHostApiInfo[size];
    çà m'étonnerait fort que çà compile...

  11. #11
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Il n'y a aucune raison que ça ne compile pas, le tout c'est ensuite de bien instancier chaque élement du tableau
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  12. #12
    Membre éprouvé Avatar de XristofGreek
    Inscrit en
    Août 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 164
    Par défaut
    attends là si je ne me trompe pas :

    Citation:

    PaHostApiInfo info[] = new PaHostApiInfo[size];


    çà m'étonnerait fort que çà compile...
    euh.... pardon.... si si çà compile

  13. #13
    Membre chevronné Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Par défaut
    et si tu faisais:

    Ca donne quoi?

  14. #14
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 23
    Par défaut
    Ca compile bel et bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    15: PaHostApiInfo info[] = new PaHostApiInfo[size];
    16: info=GetAPIDevicesInfos(size);
    L'instanciation est assez compliquée : elle se fait via JNI dans un code natif en c++ :
    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
    JNIEXPORT jobjectArray JNICALL Java_SetSampleRate_GetAPIDevicesInfos (JNIEnv *env, jclass cls, jint size)
    {
        jobjectArray result;
        PaHostApiIndex i;
        const PaHostApiInfo * info;
        jclass PaHostApiInfoCls = env->FindClass("PaHostApiInfo");
        if (PaHostApiInfoCls == NULL)    return NULL; /* exception thrown */
        result = env->NewObjectArray((jsize) size, PaHostApiInfoCls, NULL);
        if (result == NULL) return NULL; /* out of memory error thrown */
        jmethodID constructorID = env->GetMethodID(PaHostApiInfoCls, "PaHostApiInfo", "(IILjava/lang/String;III)V");
        for (i=0; i<size; i++)
        {
            info = Pa_GetHostApiInfo(i);
            jobject jInfo = env->NewObject(PaHostApiInfoCls, constructorID, (jint) info->structVersion,
                (jint) info->type, env->NewStringUTF(info->name), (jint) info->deviceCount,
                (jint) info->defaultInputDevice, (jint) info->defaultOutputDevice);
            if (jInfo == NULL)    return NULL; /* exception thrown */
            env->SetObjectArrayElement(result, i, jInfo);
            env->DeleteLocalRef(jInfo);
        }
        return result;
    }

  15. #15
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 23
    Par défaut
    J'ai trouvé d'où venait l'erreur : ici c'est un problème de JNI.
    Quand on utilise la méthode GetMethodID de JNI pour récupérer non pas une méthode banale, mais un constructeur, alors il y a un tout petit détail à modifier : l'argument qui habituellement représente le nom de la méthode (ici à "PaHostApiInfo") doit prendre la valeur "<init>".

    Donc effectivement l'instanciation de mon tableau ne se passait pas correctement, d'où l'exception retournée...

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

Discussions similaires

  1. [JNI]dll java
    Par icepower dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 03/09/2009, 14h53
  2. [ JNI ] [ plug-in ] generateur d'en-tete *.h
    Par akira_le_gaucher dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 20/04/2004, 17h18
  3. [debutant][JNI]Stocker des objet pour les rappeler plus tard
    Par Celenor dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 28/03/2004, 01h28
  4. [Plugin]package does not match the expected package src
    Par Fladnag dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 10/03/2004, 20h17
  5. [Débutant][JNI]Erreur de chargement de dll
    Par Agifem dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 24/04/2003, 14h36

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