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

Applets Java Discussion :

[Applet] Parcourir tous les fichiers d'une URL


Sujet :

Applets Java

  1. #1
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut [Applet] Parcourir tous les fichiers d'une URL
    Bonjour tout le monde, je tiens tout d'abord à dire que je débute en Java,

    alors voilà mon problème est le suivant : j'ai réalisé un programme Java, en l'occurence une applet, qui charge des fichiers contenus dans un certain répertoire.
    Bon cela fonctionne normalement quand je la lance comme une application sur mon PC (c'est-à-dire lorsque les fichiers sont dans un répertoire de mon PC).
    Or, je voudrais que cela fonctionne lorsque je mets le dossier contenant ces fichiers ainsi que l'applet sur une même adresse FTP.

    Est-ce que quelqu'un aurait une idée sur comment parcourir ce dossier (je le rappelle, le dossier et l'applet sont sur la même adresse, donc il ne devrait pas y avoir de restrictions de sécurité logiquement).

    Merci d'avance pour toute aide !!!

    P.S. : J'arrive à me connecter (à l'aide d'une Classe FTPConnection récupérée sur internet) à l'adresse FTP quand je lance mon application sur mon PC (et ainsi à scanner le répertoire), mais quand j'utilise mon programme en tant qu'Applet, j'ai une erreur de sécurité "java.security.AccessControlException: access denied (java.net.SocketPermission ftpperso.free.fr resolve)", alors que mon applet est sur mon adresse FTP... Enfin, je me demande si c'est bien nécessaire de me connecter à l'adresse alors que l'applet y est...

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

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 215
    Points : 278
    Points
    278
    Par défaut
    Citation Envoyé par Frac10
    Enfin, je me demande si c'est bien nécessaire de me connecter à l'adresse alors que l'applet y est...
    non c'est clair... pas besoin de passer par le net pour acceder a des fichiers en local.

    fais vois comment tu accedais a ces fichiers quand c'etait sur ton disque local, c'est sans doute pas grand chose

  3. #3
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Merci pour ta réponse rapide !

    Je te mets le bout de code correspondant lorsque l'applet est lancée directement sur le disque local :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    String[] listeFichiers;
    File repertoire = new File("../OBJ Without Constants");
    listeFichiers = repertoire.list();
     
    if ( listeFichiers != null)
    {
          for (int j = 0 ; j<listeFichiers.length ; j++) {
                System.out.println(listeFichiers[j]);
          }
    }
    Voilà, c'est pas bien sorcier, mais quand j'essaye de le lancer en tant qu'Applet sur le FTP, j'obtiens une erreur : "java.security.AccessControlException: access denied (java.io.FilePermission .\OBJ Without Constants read)" à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listeFichiers = repertoire.list();

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Les Applets sont exécutés sur le poste du client. Et les règles de sécurité interdise de lire le contenu d'un répertoire local. C'est pour cela que tu obtiens une java.security.AccessControlException...

    Si tu veux vraiment lire le contenu d'un répertoire local sur le poste client, il faut que tu signes ton Jar afin de l'authoriser à effectuer certaine action.




    Maitenant si tu veux lire le contenu d'un répertoire sur le serveur, il faut en effet que tu utilises une connection FTP (ou autre), étant donné que ton applet s'exécute sur le poste client. Toutefois, et toujours pour des raisons de sécurité, une applet non-signé ne peut se connecter que sur la machine depuis laquelle elle a été lancé...

    Or, ton applet est lancé depuis une site du style tonCompte.free.fr et tu essaye de te connecter au site ftpperso.free.fr, qui sont considéré comme deux sites distincts, et donc tu te retrouve encore bloqué... Il faut donc signer ton applet pour pouvoir te connecter à "d'autre" site...


    Pour plus d'information sur les applets signées : http://www.developpez.net/forums/sho...d.php?p=129387


    Maintenant, si tu veux bien récupérer la liste des fichiers d'un répertoire de ton serveur, sans pour autant signer ton applet, tu peux utiliser une page PHP sur ton serveur (free supporte le PHP) qui te renverra la liste des fichiers d'un répertoire (en XML, texte formaté, ou autre format) que tu récupéreration via un URL.openConnection(). Cela devrait normalement marcher puisque tu te connectes sur la même machine...

    Pour afficher la liste les fichiers en PHP, tu trouvera ton bonheur dans les sources PHP : http://php.developpez.com/sources/?p...iers#listereps

    a++

  5. #5
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Ok, merci bien pour ta réponse !

    Effectivement, j'avais essayé avec un .jar signé, mais çà ne marchait pas, la fenêtre se fermait automatiquement (sans que je sache pourquoi)...

    Sinon en ce qui concerne la solution du PHP, çà me conviendrait effectivement parfaitement, vu que çà semble un peu "bourrin" de se connecter à l'adresse où le fichier est déjà.

    Bon, je regarde le lien et je vous tiens au courant.

    Encore merci !!!

  6. #6
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Heu désolé de re-déranger, mais j'ai un petit doute sur l'utilisation du PHP dans le cas présent (parce que çà aussi je ne maîtrise pas du tout, donc avant de me lancer là-dedans...) :
    En fait j'ai pour mon application, j'ai besoin de lire les fichiers du répertoire (en fait ce sont des objets WaveFront que je charge grâce au loader de l'API Java 3D) : le script en PHP ne va-t-il pas juste me renvoyer les noms de ces fichiers ? Et ensuite quand je les "chargerai", aurai-je une AccessControlException, comme dans l'autre cas ?

    C'est juste pour être sûr avant de me lancer...

    Merci d'avance !!!

  7. #7
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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
    Points : 552
    Points
    552
    Par défaut
    Bon, je n'ai pas tout bien compris, mais si ton applet qui se trouve sur un domaine doit lire des fichiers qui se trouve sur le meme domaine, alors j'ai la solution:

    Quand j'ai une applet, je n'utilise pas la classe File mais la classe URL pour lire le contenu des fichiers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    URL download = new URL(getCodeBase(), "donnees/data.txt");
     
    BufferedReader in = new BufferedReader(new InputStreamReader(download.openConnection().getInputStream()));

    Billy

  8. #8
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Tout d'abord, merci d'avoir répondu !

    Ensuite, je vais essayer de m'expliquer un petit peu mieux...
    En fait ce que je voudrais c'est en premier lieu d'obtenir le nom de tous les fichiers contenus dans un certain répertoire de mon adresse (est-ce possible avec la classe URL ?).

    Ensuite, je passe ces noms en paramètres à la fonction qui va charger les objets WaveFront (les fichiers sont des .OBJ).
    Or cette fonction (qui est incluse dans l'API Java 3D) doit lire les fichiers dont j'ai donné le nom (il ne me faut pas seulement le nom du fichier, mais pouvoir y accéder en lecture) : cela fonctionne lorsque mon répertoire est en local, mais je ne sais pas si c'est possible avec la classe URL sur une adresse FTP...

    Merci d'avance !!!

  9. #9
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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
    Points : 552
    Points
    552
    Par défaut
    Je t'assure que lire son contenu marche correctement. Maintenant à toi de voir si tu peux lister le contenu des fichiers.

  10. #10
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Ok merci, je vais donc essayer cela, parce que j'arrive à obtenir le contenu HTML d'un répertoire donné de mon adresse avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    BufferedReader reader=new BufferedReader(new InputStreamReader(new BufferedInputStream(conn.getInputStream())));
    for(;;)
    {
          String strRead=reader.readLine();
          if (strRead==null) break;
          System.out.println(strRead);
    }
    reader.close();
    Donc si tu me dis que pour l'accès en lecture y'a pas de problème, je vais me lancer dans le décorticage du HTML (je ne maîtrise pas trop le StringTokenizer)...

    Merci bien pour ton aide, je te tiendrai au courant !

  11. #11
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Bon alors comme indiqué, je suis arrivé à obtenir le nom des fichiers contenus dans le répertoire voulu, mais quand j'essaie de les charger avec ma fonction loadWavefrontObject, je me retrouve avec une erreur "AccessControlException" ; j'ai bien essayé de faire un .jar et de le signer, mais quand je le lance, la fenêtre internet se ferme...

    Je vous mets les bouts de code qui concernent ce problème (voici l'adresse ftp http://mfrac10.free.fr/HTML%20Multiple2.htm pour les fichiers .class et http://mfrac10.free.fr/HTML%20Multiple2.htm pour le .jar) :

    Le bout qui se connecte à l'adresse URL et qui appelle pour chaque fichier la fonction loadWavefrontObject :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
      int error = 0;
      String s;
      StringTokenizer st;
      String filename = "<a href="http://mfrac10.free.fr/OBJ_Without_Constant" target="_blank">http://mfrac10.free.fr/OBJ_Without_Constant</a>";
     
      try
      {
             URL url = new URL(filename);
             URLConnection conn=url.openConnection();
             BufferedReader reader=new BufferedReader(new InputStreamReader(new BufferedInputStream(conn.getInputStream())));
       int i = 0;
     
       for(;;)
       {
        String strRead=reader.readLine();
        if(strRead==null)break;
        st = new StringTokenizer(strRead, "\"");
        //Je cherche le caractère " qui délimite les noms de fichier
        i++;
     
        if (i > 10)
        //les 10 premières lignes ne m'intéressent pas, l'énumération des fichiers commence après
        {
         int j = 0;
     
         while (st.hasMoreTokens())
         {
          j++;
          s = st.nextToken();
     
          if (j==6)
          //le Token 6 correspond au nom du fichier
          {
           System.out.println("Nom du fichier : " + s);
           BranchGroup hey = loadWavefrontObject(s);
          }
         }
        }
       }
       reader.close();
      }
      catch (IOException ex) {
       System.out.println("Ca marche pas...");
       error = -1;
      }
      catch (ParsingErrorException ex) {
       System.out.println("Fichier defectueux");
       error = -1;
      }
      catch (IncorrectFormatException ex) {
       System.out.println("Mauvais format de fichier");
       error = -1;
      }
     
      if (error != 0)
       System.exit(error);
    Et le BranchGroup loadWavefrontObject :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
     private BranchGroup loadWavefrontObject(String filename) {
     
      ObjectFile waveFrontObject = new ObjectFile(ObjectFile.STRIPIFY | ObjectFile.TRIANGULATE);
     
      int error = 0;
      sceneNum++;
      System.out.println("sceneNum = " + sceneNum);
      Scene scene = null;
      objects = new Hashtable();
     
      try {
       objects = waveFrontObject.load(filename).getNamedObjects();
     
       if (!applet) {
       scene = waveFrontObject.load(filename);
       }
       else {
        URL url = this.getCodeBase();
        String path = url.toString() + filename;
     
        try {
         URL fileUrl = new URL(path);
         scene = waveFrontObject.load(fileUrl);
        }
        catch (MalformedURLException ex2) {
         System.out.println("Impossible de charger le fichier : " + filename);
         error = -1;
        }
       }  // fin else
      }  // fin try
      catch (ParsingErrorException ex) {
       System.out.println("Fichier defectueux");
       error = -1;
      }
      catch (IncorrectFormatException ex) {
       System.out.println("Mauvais format de fichier");
       error = -1;
      }
      catch (FileNotFoundException ex) {
       System.out.println("Fichier " + filename + " non trouve");
       error = -1;
      }
     
      if (error != 0)
       System.exit(error);
    Désolé pour la façon dont j'ai codé cela, çà doit pas être beau à voir pour des habitués du Java...

    Merci d'avance pour les personnes qui voudront bien jeter un petit coup d'oeil à mon problème (parce que çà fait quand même une semaine que je galère sur ce "petit" truc)...


    P.S. : comment on peut faire pour conserver les tabulations quand on insère un code dans un message ici ?

  12. #12
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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
    Points : 552
    Points
    552
    Par défaut
    Donne moi plus d'infos sur ton erreur.

    http://www.resus.univ-mrs.fr/~billy/

    Tu vas dans "mes réalisations" et tu lances MiniDibou. Cette application est paramétrée avec des fichiers qui se trouvent sur le serveur. Lecture des documents et tout et tout...

    Donc je pense qu'il y a un schmilblink sur ton erreur...

  13. #13
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Ben en fait c'est bizarre, sur le lien vers le fichier .jar que j'ai mis dans ma réponse précédente, la fenêtre ne se ferme pas (à contrario de ce qui se passe quand je la lance à partir du site ftp sur mon pc), mais toujours le message d'erreur sur l'accès (alors que le .jar est signé )...

    Je te mets le message d'erreur :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    OUI : 001_1.obj
    sceneNum = 1
    Exception in thread "AWT-EventQueue-2" java.security.AccessControlException: access denied (java.io.FilePermission 001_1.obj read)
     at java.security.AccessControlContext.checkPermission(Unknown Source)
     at java.security.AccessController.checkPermission(Unknown Source)
     at java.lang.SecurityManager.checkPermission(Unknown Source)
     at java.lang.SecurityManager.checkRead(Unknown Source)
     at java.io.FileInputStream.<init>(Unknown Source)
     at java.io.FileInputStream.<init>(Unknown Source)
     at java.io.FileReader.<init>(Unknown Source)
     at com.sun.j3d.loaders.objectfile.ObjectFile.load(ObjectFile.java:675)
     at ImportWavefrontMultiple2.loadWavefrontObject(ImportWavefrontMultiple2.java:525)
     at ImportWavefrontMultiple2.loadWave(ImportWavefrontMultiple2.java:440)
     at ImportWavefrontMultiple2.processButton(ImportWavefrontMultiple2.java:885)
     at ImportWavefrontMultiple2.access$200(ImportWavefrontMultiple2.java:46)
     at ImportWavefrontMultiple2$9.actionPerformed(ImportWavefrontMultiple2.java:997)
     at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
     at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
     at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
     at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
     at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
     at java.awt.Component.processMouseEvent(Unknown Source)
     at javax.swing.JComponent.processMouseEvent(Unknown Source)
     at java.awt.Component.processEvent(Unknown Source)
     at java.awt.Container.processEvent(Unknown Source)
     at java.awt.Component.dispatchEventImpl(Unknown Source)
     at java.awt.Container.dispatchEventImpl(Unknown Source)
     at java.awt.Component.dispatchEvent(Unknown Source)
     at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
     at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
     at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
     at java.awt.Container.dispatchEventImpl(Unknown Source)
     at java.awt.Component.dispatchEvent(Unknown Source)
     at java.awt.EventQueue.dispatchEvent(Unknown Source)
     at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
     at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
     at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
     at java.awt.EventDispatchThread.run(Unknown Source)
    Et je ne pense pas que çà soit sur le chemin d'accès parce que j'ai essayé pas mal de chose et toujours cet "access denied"...

    Sinon, désolé ce week-end j'ai pas trop le temps de regarder tes sources ( ), mais promis je me lance dedans lundi : elles sont vraiment bien faite tes 2 applications !!!

  14. #14
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Désolé, j'avais mal compris, je pensais que t'avais mis les sources sur ton site...
    Sinon c'est vrai qu'elles marchent nickell tes applications.

    De mon côté, l'erreur se situe au niveau du "loader" d'objet Wavefront, mais je vois pas trop pourquoi !

    Si quelqu'un avait une idée, je le remercie d'avance !

  15. #15
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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
    Points : 552
    Points
    552
    Par défaut
    A mon avis, pour savoir qui est le fautif, essaye de simplifier un peu le code, et de repartir sur des bases correctes. Je pense donc à créer une classe qui ouvre un fichier et qui affiche le contenu (Hello World, par exemple), ce fichier étant sur le serveur.

    Après tu complexifie au fur et à mesure dès que l'execution ne génère pas d'erreurs. Tu verras, ca a l'air long, mais tu y gagnes à la fin.


    Billy

  16. #16
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Oui c'est vrai je pense que tu as raison, je vais essayer de partir de la base pour voir si j'arrive à lire le contenu d'un fichier tout simple...

    Je te tiens au courant, merci bien pour ton aide !

  17. #17
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Bon alors j'ai essayé avec çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    URL fileUrl = new URL(getCodeBase(), "Test.txt");
    reader = new BufferedReader(new InputStreamReader(fileUrl.openConnection().getInputStream()));
    LigneLue = reader.readLine();
    et çà marche très bien dans une applet, avec l'applet et le fichier exemple "Test.txt" sur le même site FTP : j'arrive à lire le contenu du fichier.

    Par contre, j'ai regardé la méthode avec laquelle les fichiers .obj sont lus (dans le fichier ObjectFile.java de l'API Java3D) et je pense que mon erreur vient de là : il y a une fonction pour charger les objets à partir d'un String ("load(String filename)")et une autre à partir d'une URL ("load(URL url)") :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    /*
       * Takes a file name and sets the base path to the directory
       * containing that file.
       */
      private void setBasePathFromFilename(String fileName)
      {
        if (fileName.lastIndexOf(java.io.File.separator) == -1) {
          // No path given - current directory
          setBasePath("." + java.io.File.separator);
        } else {
          setBasePath(
     fileName.substring(0, fileName.lastIndexOf(java.io.File.separator)));
        }
      } // End of setBasePathFromFilename
     
      /**
       * The Object File is loaded from the .obj file specified by
       * the filename.
       * To attach the model to your scene, call getSceneGroup() on
       * the Scene object passed back, and attach the returned
       * BranchGroup to your scene graph.  For an example, see 
       * $J3D/programs/examples/ObjLoad/ObjLoad.java.
       */
      public Scene load(String filename) throws FileNotFoundException,
             IncorrectFormatException,
             ParsingErrorException
      {
        setBasePathFromFilename(filename);
        Reader reader = new BufferedReader(new FileReader(filename));
        return load(reader);
      } // End of load(String)
     
      private void setBaseUrlFromUrl(URL url) throws FileNotFoundException
      {
        String u = url.toString();
        String s;
        if (u.lastIndexOf('/') == -1) {
          s = url.getProtocol() + ":";
        } else {
          s = u.substring(0, u.lastIndexOf('/') + 1);
        }
        try {
          baseUrl = new URL(s);
        }
        catch (MalformedURLException e) {
          throw new FileNotFoundException(e.getMessage());
        }
      } // End of setBaseUrlFromUrl
     
      /**
       * The object file is loaded off of the web.
       * To attach the model to your scene, call getSceneGroup() on
       * the Scene object passed back, and attach the returned
       * BranchGroup to your scene graph.  For an example, see 
       * $J3D/programs/examples/ObjLoad/ObjLoad.java.
       */
      public Scene load(URL url) throws FileNotFoundException,
            IncorrectFormatException,
            ParsingErrorException
      {
        BufferedReader reader;
        if (baseUrl == null) setBaseUrlFromUrl(url);
        try {
          reader = new BufferedReader(new InputStreamReader(url.openStream()));
        }
        catch (IOException e) {
          throw new FileNotFoundException(e.getMessage());
        }
        fromUrl = true;
        return load(reader);
      } // End of load(URL)
    Pourtant j'ai essayé de lancer la fonction load avec une URL comme paramètre, mais la fenêtre internet se bloque lorsque je lance mon applet depuis le site FTP (çà me saoûle), et toujours la même erreur lorsque je la lance en local...
    Je n'ai plus qu'à persévérer, çà devrait pas être si compliqué quand même !

    Je vous tiens au courant.

  18. #18
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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
    Points : 552
    Points
    552
    Par défaut
    Il y a quelque chose qui me tracasse dans tout ça. Où est le rapport avec le FTP? C'est un protocole, pas un type de site. (Je pense que tu transfères tes fichiers sur un serveur via FTP...).

    A quoi correspondent tes .obj? Des objets JAVA?


    sur l'applet que tu as vue, il y a du texte, des images, des sons...


    Pour t'aider, voici de l'aide:

    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
    30
    31
     
      private void machine(Vector travaux) {
     ...
          if (str[0].equals("SemAjouterObjet")) {
            for (int i = 0; i < grille.getComponentCount(); i++)
              if (grille.getComponent(i).getName().equals("case" + str[3])) {
                MyLabel caseX = (MyLabel) grille.getComponent(i);
                try { // lecture de l'image avec une URL: avec try sinon il dit erreur!!
                  Image img = this.getToolkit().getImage(new URL(getCodeBase(), "images/FormesGeometriques/" + str[1] + str[2] + ".gif"));
                  caseX.setImage(img);
                }
                catch (Exception e) { // problemes... on dégage
                  System.out.println("Pb dans machine --> " + e);
                  System.exit(0);
                }
              }
          }
     ...
      }
     
      // joue du son
      private void playSound(String parseURL) {
        try { // lecture du son avec une URL: avec try sinon il dit erreur!!
          AudioClip sound = this.getAudioClip(new URL(getCodeBase(), "sons/" + parseURL));
          sound.play();
        }
        catch (Exception ex) { // problemes... on dégage
          System.out.println("Pb dans playSound --> " + ex);
          System.exit(0);
        }
      }

  19. #19
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Wahooo !!!!!!
    Mille merci pour ton aide billy, çà marche !!!

    Quel boulet alors, çà faisait plus de 10 jours que je luttais pour arriver à çà...

    En fait, c'est exactement ton code avec l'URL, il fallait que je fasse çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scene = waveFrontObject.load(new URL(getCodeBase(), "Dossier_Qui_Contient_Les_OBJ/" + filename));
    avec "filename", le nom des fichiers...

    Mais ensuite, il me fallait un "getNamedObjects" pour récupérer le nom des objets créés.

    Donc encore énormément de m'avoir aider, j'y serai jamais arrivé tout seul !



    EDIT : désolé, j'avais oublié de mettre [Résolu]...

  20. #20
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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
    Points : 552
    Points
    552
    Par défaut
    Et ben voilà!

    Allez, bon courage pour la suite.


    Billy

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/07/2009, 15h05
  2. Inclure tous les fichiers d'une solution
    Par soso78 dans le forum Visual Studio
    Réponses: 1
    Dernier message: 14/10/2008, 16h47
  3. parcourir tous les textbox d'une form
    Par olibara dans le forum C#
    Réponses: 2
    Dernier message: 23/09/2008, 12h28
  4. Réponses: 1
    Dernier message: 06/12/2007, 16h50
  5. [VBA-E] Parcourir tous les boutons d'une feuille
    Par striky2 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/05/2006, 08h51

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