Partage
  • Partager sur Facebook
  • Partager sur Twitter

Thread .sleep ne rend pas la main

    6 novembre 2008 à 11:29:20

    Bonjour a vous tous
    je suis entrain de développer un mini JukeBox, pour cela j'utilise La SDL pour la creation de l'interface utilisateur et Fmod pour la lecture des fichiers audio.
    J'utilise une boucle While pour intercepter les clicks de l'utilisateur et pour lancer la musique j'utilise un Thread.
    Le problème le voici : des que je lance un Thread avec un sleep() pour lire un morceau de musique sa me bloc la boucle while et du coup l'utilisateur ne peut rien faire jusqu’a ce que le thread ai fini son temps d'attente (la boucle while lance une methode qui fait appel au thread)après cela la boucle reprend la main et l'utilisateur peut a nouveau naviguer sur le menu.

    Si vous avez votre petite idée la dessous, aidez moi :D



    • Partager sur Facebook
    • Partager sur Twitter
      6 novembre 2008 à 17:51:52

      Tu n'as pas un bout de code ? Ca risque d'être difficile de t'aider sans...
      • Partager sur Facebook
      • Partager sur Twitter
        7 novembre 2008 à 20:40:04

        merci de m'avoir repondu

        while (!artiste_is_clicked) {

        SDLEvent e = SDLEvent.waitEvent();
        if(e.getMouseState().getButtonState().buttonLeft() == true){
        this.bt_menu_clicked(e.getMouseState().getX(), e.getMouseState().getY());
        this.artiste_clicked(e.getMouseState().getX(), e.getMouseState().getY();
        }

        }
        ce bout de code me permet d'intercepter ou l'utilisateur click en l'occurence son choix d'artiste.

        ******************************************************************************************************
        import static org.jouvieje.FmodEx.Defines.FMOD_INITFLAGS.FMOD_INIT_NORMAL;
        import static org.jouvieje.FmodEx.Defines.FMOD_MODE.FMOD_DEFAULT;
        import static org.jouvieje.FmodEx.Defines.FMOD_MODE.FMOD_HARDWARE;
        import static org.jouvieje.FmodEx.Defines.FMOD_MODE.FMOD_LOOP_OFF;
        import static org.jouvieje.FmodEx.Defines.FMOD_MODE.FMOD_OPENMEMORY;
        import static org.jouvieje.FmodEx.Defines.FMOD_TIMEUNIT.FMOD_TIMEUNIT_MS;
        import static org.jouvieje.FmodEx.Defines.VERSIONS.FMOD_VERSION;
        import static org.jouvieje.FmodEx.Defines.VERSIONS.NATIVEFMODEX_JAR_VERSION;
        import static org.jouvieje.FmodEx.Defines.VERSIONS.NATIVEFMODEX_LIBRARY_VERSION;
        import static org.jouvieje.FmodEx.Enumerations.FMOD_CHANNELINDEX.FMOD_CHANNEL_FREE;
        import static org.jouvieje.FmodEx.Enumerations.FMOD_RESULT.FMOD_ERR_CHANNEL_STOLEN;
        import static org.jouvieje.FmodEx.Enumerations.FMOD_RESULT.FMOD_ERR_INVALID_HANDLE;
        import static org.jouvieje.FmodEx.Enumerations.FMOD_RESULT.FMOD_OK;
        import static org.jouvieje.FmodEx.Misc.BufferUtils.newByteBuffer;
        import static org.jouvieje.FmodEx.Misc.BufferUtils.SIZEOF_INT;
        import javax.swing.*;
        import java.nio.ByteBuffer;

        import javax.swing.JPanel;

        import org.jouvieje.FmodEx.Channel;
        import org.jouvieje.FmodEx.FmodEx;
        import org.jouvieje.FmodEx.Init;
        import org.jouvieje.FmodEx.Sound;
        import org.jouvieje.FmodEx.System;
        import org.jouvieje.FmodEx.Defines.INIT_MODES;
        import org.jouvieje.FmodEx.Enumerations.FMOD_RESULT;
        import org.jouvieje.FmodEx.Exceptions.InitException;
        import org.jouvieje.FmodEx.Structures.FMOD_CREATESOUNDEXINFO;


        public class Lecteur_Track extends Thread{

        private System system = new System();
        private Sound sound = new Sound();
        private Channel channel = new Channel();
        private ByteBuffer buffer;
        private int compteur ,duree_integrale , duree_passer;
        private boolean playing;
        Navigateur navigateur;

        public Lecteur_Track(){

        initFmod();
        this.buffer = newByteBuffer(SIZEOF_INT);
        playing = false;
        duree_integrale = 0;
        duree_passer = 0;
        compteur = 0;



        }
        /* public Lecteur_Track(Navigateur N){

        initFmod();
        this.buffer = newByteBuffer(SIZEOF_INT);
        playing = false;
        duree_integrale = 0;
        duree_passer = 0;
        compteur = 0;
        //this.navigateur = N;


        }
        */

        public void initFmod()
        {
        /*
        * NativeFmodEx Init
        */
        try
        {
        Init.loadLibraries(INIT_MODES.INIT_FMOD_EX/*_MINIMUM*/);
        }
        catch(InitException e)
        {
        //printfExit("NativeFmodEx error! %s\n", e.getMessage());
        return;
        }

        /*
        * Checking NativeFmodEx version
        */
        if(NATIVEFMODEX_LIBRARY_VERSION != NATIVEFMODEX_JAR_VERSION)
        {
        //printfExit("Error! NativeFmodEx library version (%08x) is different to jar version (%08x)\n", NATIVEFMODEX_LIBRARY_VERSION, NATIVEFMODEX_JAR_VERSION);
        return;
        }

        /*==================================================*/

        //init = true;
        }

        public void run(int attente, String chemin){

        ByteBuffer soundBuffer;
        FMOD_CREATESOUNDEXINFO exinfo;
        //Channel channel = new Channel();

        /*
        * Buffer used to store all datas received from FMOD.
        */

        /*
        * Create a System object and initialize.
        */
        //compteur = compteur + 1;
        FmodEx.System_Create(system);
        system.getVersion(buffer.asIntBuffer());
        system.init(32, FMOD_INIT_NORMAL, null);
        soundBuffer = Medias.loadMediaIntoMemory(chemin);
        FMOD_CREATESOUNDEXINFO.create();
        exinfo = FMOD_CREATESOUNDEXINFO.create();
        exinfo.setLength(soundBuffer.capacity());
        system.createSound(soundBuffer, FMOD_HARDWARE | FMOD_OPENMEMORY, exinfo, sound);
        sound.getLength(this.buffer.asIntBuffer(), FMOD_TIMEUNIT_MS);
        duree_integrale = buffer.getInt(0);

        //sound.getLength(buffer.asIntBuffer(), FMOD_TIMEUNIT_MS);
        soundBuffer = null;
        exinfo.release();
        //this.navigateur.run();
        try {
        sleep(attente);
        } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        system.playSound(FMOD_CHANNEL_FREE, sound, false, this.channel);


        //compteur = compteur - 1;
        //channel.isPlaying(buffer);
        //playing = buffer.get(0) != 0;
        }

        public int get_duree_integrale(){

        return duree_integrale;
        }
        public int get_duree_passer(){

        channel.getPosition(this.buffer.asIntBuffer(), FMOD_TIMEUNIT_MS);
        duree_passer = buffer.getInt(0);
        return duree_passer;
        }
        public boolean Track_is_playing(){

        if(channel.isNull()){playing = false ;}
        if (!channel.isNull()){playing = true ;}
        return playing;
        }


        }

        et ceci et le thread qui doit ce lancer apres une duree(le morceau de musique qui le precede).

        encor une autre fois merci
        • Partager sur Facebook
        • Partager sur Twitter
          8 novembre 2008 à 11:13:55

          Tu pourrais mettre ça dans une balise de code s'il te plaît ?
          Sinon, on sait utiliser la SDL en JAVA oO
          Je savais pas...
          Je me coucherai moins con ce soir ^^
          • Partager sur Facebook
          • Partager sur Twitter

          Thread .sleep ne rend pas la main

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown