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 :

LWJGL Applet - Lecture fichier refusé


Sujet :

Entrée/Sortie Java

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2012
    Messages : 12
    Par défaut LWJGL Applet - Lecture fichier refusé
    Bonsoir à tous !

    Après de nombreuses recherches sur un problème pourtant assez connu, je me tourne vers vous car jusqu'à présent je n'ai rien trouvé de concluant ...
    Je vous expose donc mon problème :
    Je suis en plein dans le développement d'un jeu sur Applet, et pour cela j'utilise les APIs LWJGL et Slick2D (j'utilise ce dernier pour ouvrir les images ainsi que les sons). Cependant, lors du chargement, mon programme plante avec le message d'erreur suivant :

    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
    This occurred while 'Initializing real applet'
    access denied ("java.io.FilePermission" ".\snd\Tir1-16b.wav" "read")
    java.security.AccessControlException: access denied ("java.io.FilePermission" ".\snd\Tir1-16b.wav" "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.File.exists(Unknown Source)
        at org.newdawn.slick.util.FileSystemLocation.getResourceAsStream(FileSystemLocation.java:52)
        at org.newdawn.slick.util.ResourceLoader.getResourceAsStream(ResourceLoader.java:61)
        at myapps.Files.load(Files.java:24)
        at myapps.MyApps.init(MyApps.java:32)
        at org.lwjgl.util.applet.AppletLoader.switchApplet(AppletLoader.java:1330)
        at org.lwjgl.util.applet.AppletLoader$2.run(AppletLoader.java:909)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$200(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(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)
    Le code qui génère ce plantage est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Files {
        public static Audio sound;
     
        public static void load() {
            try {
                sound = AudioLoader.getAudio("WAV", ResourceLoader.getResourceAsStream("/snd/Tir1-16b.wav"));
            } catch (IOException ex) {
                Logger.getLogger(Files.class.getName()).log(Level.SEVERE, null, ex);
            }
     
            System.out.println("loaded with success !");
        }
    La solution la plus récurrente que j'ai trouvé jusqu'à présent est de signer l'applet. Mais même le fait de l'avoir signé n'a pas changé grand chose ... J'ai utilisé ces commandes pour créer un certificat nécessaire à la signature d'une applet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    keytool -genkey -keyalg rsa -alias key
    keytool -export -alias key -file cert.crt
    jarsigner MyApps.jar key
    Voilà... Je vous remercie par avance pour les réponses et j'espère que vous m'éclairerez davantage sur ce problème que je trouve bien mystérieux ...

    Bonne soirée à tous !

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Par défaut
    ton .wav se trouve dans ton jar sur le serveur ou sur l'ordi client?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2012
    Messages : 12
    Par défaut
    Bonsoir ludomacho,

    mon .wav est côté serveur, mais il n'est pas dans le .jar de mon programme (d'ailleurs, que le .wav soit présent ou pas, l'erreur survient quand même. Ce qui veut dire que l'exception semble être levé avant toute lecture).

  4. #4
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Par défaut
    L'applet se lance sur l'ordi client et donc tente de lire un fichier sur l'ordi client et non sur le serveur.

    Et le chemin spécifié n'existe pas puisque comme tu l'as dit le fichier est sur le serveur.

    l'erreur intervient certainement quand l'applet tente de trouver le chemin qui n'existe pas. Et donc que le fichier soit présent ou pas sur le serveur ne change rien.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2012
    Messages : 12
    Par défaut
    Je vois ce que tu veux dire ... Comment remédier à ce problème ?
    Je ne sais pas si la méthode qui permet la récupération des sources prenne en compte les URL ...
    La méthode que j'utilise est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ResourceLoader.getResourceAsStream(String ref);

  6. #6
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Par défaut
    le plus simple serait de mettre le fichier dans ton jar. Essaie cela et tiens moi au courant

  7. #7
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 105
    Par défaut
    Si tu dis que le wav est coté serveur et que tu cherches après
    "/snd/Tir1-16b.wav"
    c'est sure ca ne marchera pas. Soit tu inclus le fichier dans ton jar, soit tu utilises une url (avec la méthode streaming audio peut être).
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2012
    Messages : 12
    Par défaut
    Bonsoir wax78,

    bon, pendant 3 minutes j'ai cru au miracle car mon jeu s'est bel et bien lancé sur navigateur avec le son ... Mais après avoir ajouté des lignes peu à peu, ça ne marche à nouveau plus, ni avec la version qui marchait. Oui, c'est très bizarre et ça me rend plus que perplexe...

    Si tu dis que le wav est coté serveur et que tu cherches après
    Citation:
    "/snd/Tir1-16b.wav"
    c'est sure ca ne marchera pas. Soit tu inclus le fichier dans ton jar, soit tu utilises une url.
    Mais si j'inclus les images/sons dans le .jar, comment dois-je modifier le chemin en conséquence ?

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2012
    Messages : 12
    Par défaut
    Wow ...
    Je l'ai inséré dans mon application .jar, et je crois que maintenant ça marche impec'...
    Que dire à part que mes recherches ont du s'étaler facilement sur 3 semaines.
    Merci à vous deux pour vos réponses simples et claires !
    Je précise les étapes pour ceux qui auraient le même problème un jour :
    - J'ai du modifier légèrement le chemin d'accès :
    "snd/Tir1-16b.wav" // j'ai retiré le ./ qui faisait aussi bugger
    - J'ai mis les images/sons directement dans le .jar (au même endroit que la où y'a les dossiers "META-INF" et "(nomdevotreprojet)".

    Voilà, au final ça fait pas grand chose, mais le pire c'est que je crois que j'avais testé cette méthode il y a longtemps, mais sans succès. Mais j'ai du mal m'y prendre et j'ai du laisser passer quelque chose.

    En tout cas merci encore pour votre aide !

    Je met en status résolu !

  10. #10
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Par défaut
    utilises

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ClassLoader classLoader = getClass().getClassLoader();
    classLoader.getResourceAsStream("Tir1-16b.wav");
    et tu mets le .wav au même niveau que ta class principale.

    tu peux aussi creer un repertoire music auquel cas ca donnera

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ClassLoader classLoader = getClass().getClassLoader();
    classLoader.getResourceAsStream("music/Tir1-16b.wav");

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2012
    Messages : 12
    Par défaut
    utilises

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ClassLoader classLoader = getClass().getClassLoader();
    classLoader.getResourceAsStream("Tir1-16b.wav");
    et tu mets le .wav au même niveau que ta class principale.

    tu peux aussi creer un repertoire music auquel cas ca donnera

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ClassLoader classLoader = getClass().getClassLoader();
    classLoader.getResourceAsStream("music/Tir1-16b.wav");
    Merci pour la précision, je le ferai ainsi ! C'est vrai que c'est quand même plus propre !

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

Discussions similaires

  1. Problème de lecture fichier local depuis une applet
    Par cyspeo dans le forum Applets
    Réponses: 2
    Dernier message: 15/09/2011, 15h27
  2. Lecture fichier texte dans applet
    Par julien1451 dans le forum Applets
    Réponses: 3
    Dernier message: 15/08/2009, 15h52
  3. [LG]probleme lecture fichier
    Par yp036871 dans le forum Langage
    Réponses: 2
    Dernier message: 28/01/2004, 20h22
  4. [LG]Probleme lecture fichier file of ....
    Par John_win dans le forum Langage
    Réponses: 11
    Dernier message: 11/11/2003, 19h53
  5. [langage] prob lecture fichier .txt
    Par martijan dans le forum Langage
    Réponses: 3
    Dernier message: 16/07/2003, 12h08

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