Partage
  • Partager sur Facebook
  • Partager sur Twitter

Impossible de jouer un son

Sujet résolu
    4 mai 2021 à 13:23:05

    Bonjour/Bonsoir,

    Je suis débutant en Java (javafx) j'ai décidé d'apprendre à comment jouer un son seulement, je ne sais pas par quelle magie mais rien ne fonctionne. J'ai recherché absolument partout sur internet toutes le commandes se suivent et se ressemblent, pourtant ca ne fonctionne pas chez moi.
    J'aurais voulu créer quelque chose de simple, un bouton quand on click paf ca joue un son voici donc le code en question:

    public class Main extends Application {
     
        public static void main(String[] args) {
            launch(args);
     
        }
     
        @Override
        public void start(Stage stage) throws Exception {
            Button button = new Button("click here");
     
            Media sound = new Media(getClass().getResource("res/coin.mp3").toExternalForm());
            MediaPlayer player = new MediaPlayer(sound);
            button.setOnAction((e)->{
                player.play();
            });
     
            BorderPane panel = new BorderPane();
            panel.setCenter(button);
     
            Scene scene = new Scene(panel, 250,250);
            stage.setScene(scene);
            stage.show();
     
     
        }
    }
    

    Le fichier en question se nomme "coin.mp3" je l'ai déplacé absolument partout que ce soit dans le dossier "res" que dans le dossier principale ect...

    J'ai essayé ceci:

    Media sound = new Media(Paths.get("coin.mp3").toUri().toString());
    MediaPlayer player = new MediaPlayer(sound);

    Et puis cela:

    Code :

    URL musicURL = getClass().getResource("coin.mpg3");
    Media media = new Media(musicURL.toExternalForm());
    MediaPlayer player = new MediaPlayer(media);



    J'ai aussi essayé avec l'object "AudioClip"


     AudioClip sound = new AudioClip("file:coin.mp3");


    rien n'y fait je suis en train de m'arracher les cheveux pour quelque chose de plutôt basique. Pour plus d'informations je vous met ici le/les message(s) d'erreur en question:

    /usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java --module-path /home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib --add-modules javafx.controls,javafx.fxml -Djava.library.path=/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib -javaagent:/opt/idea/lib/idea_rt.jar=33167:/opt/idea/bin -Dfile.encoding=UTF-8 -classpath /media/fang44/49a12980-5170-427a-9f74-827843eb03f3/Documents/Java Projects/JavaFX/out/production/JavaFX:/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib/src.zip:/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib/javafx-swt.jar:/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib/javafx.web.jar:/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib/javafx.base.jar:/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib/javafx.fxml.jar:/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib/javafx.media.jar:/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib/javafx.swing.jar:/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib/javafx.controls.jar:/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib/javafx.graphics.jar sample.Main
    Exception in Application start method
    java.lang.reflect.InvocationTargetException
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
    	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    	at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
    Caused by: java.lang.RuntimeException: Exception in Application start method
    	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
    	at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
    	at java.base/java.lang.Thread.run(Thread.java:834)
    Caused by: java.lang.NullPointerException
    	at sample.Main.start(Main.java:31)
    	at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
    	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
    	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
    	at java.base/java.security.AccessController.doPrivileged(Native Method)
    	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
    	at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    	at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
    	at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277)
    	... 1 more
    Exception running application sample.Main
     
    Process finished with exit code 1

    Bon de ce que je comprend "NullPointerException" a été levé à la ligne ou je crée l'objet media, donc là ou le chemin du fichier est instancié... Comme je l'ai dis plus tot je l'ai déplacé dans tous les sens j'ai aussi écris le chemin du fichier comme ceci "file:coin.mp3", bref absolument tout ce que j'ai pu trouver sur internet. Rien n'a fonctionné pour le moment. Si quelqu'un ici est en mesure de résoudre ce problème qui est à deux doigts de l'énigme pour ma part, je lui en serrait très reconnaissant.

    Je vous remercie à l'avance de vos futures réponse bonne journée/soirée à vous.



    -
    Edité par Fang44 4 mai 2021 à 18:35:15

    • Partager sur Facebook
    • Partager sur Twitter
      4 mai 2021 à 14:18:27

      as tu vérifié que musicUrl n'était pas nul?
      • Partager sur Facebook
      • Partager sur Twitter
        4 mai 2021 à 15:38:49

        Play50hz a écrit:

        as tu vérifié que musicUrl n'était pas nul?



        Qu'est-ce que tu appelles "musicURL" ?
        • Partager sur Facebook
        • Partager sur Twitter
          4 mai 2021 à 17:03:38

          La variable musicURL que tu as dans ton code...
          • Partager sur Facebook
          • Partager sur Twitter
            4 mai 2021 à 18:29:47

            Oui quand j'essaye avec l'objet URL j'ai plus ou moins le même message d'érreur:

            /usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java --module-path /home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib --add-modules javafx.controls,javafx.fxml -Djava.library.path=/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib -javaagent:/opt/idea/lib/idea_rt.jar=46031:/opt/idea/bin -Dfile.encoding=UTF-8 -classpath /media/fang44/49a12980-5170-427a-9f74-827843eb03f3/Documents/Java Projects/JavaFX/out/production/JavaFX:/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib/src.zip:/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib/javafx-swt.jar:/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib/javafx.web.jar:/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib/javafx.base.jar:/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib/javafx.fxml.jar:/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib/javafx.media.jar:/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib/javafx.swing.jar:/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib/javafx.controls.jar:/home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib/javafx.graphics.jar sample.Main
            Exception in Application start method
            java.lang.reflect.InvocationTargetException
            	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
            	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
            	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
            	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
            	at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
            Caused by: java.lang.RuntimeException: Exception in Application start method
            	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
            	at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
            	at java.base/java.lang.Thread.run(Thread.java:834)
            Caused by: java.lang.NullPointerException
            	at sample.Main.start(Main.java:30)
            	at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
            	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
            	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
            	at java.base/java.security.AccessController.doPrivileged(Native Method)
            	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
            	at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
            	at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
            	at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277)
            	... 1 more
            Exception running application sample.Main
            
            Process finished with exit code 1



            • Partager sur Facebook
            • Partager sur Twitter
              4 mai 2021 à 20:11:35

              et donc, as tu vérifié que musicUrl n'était pas null?
              • Partager sur Facebook
              • Partager sur Twitter
                4 mai 2021 à 20:51:54

                Ba ca me met "NullPointerException", peux importe si j'utilise URL, Media + MediaPlayer, ou AudioClip... Donc oui musicUrl est surement nul tout comme le reste finalement... Seulement mon fichier existe, il est bel est bien dans mon projet j'ai même essayé de mettre le chemin absolu là où il se trouve sur mon disque dur ect... J'ai essayé aussi avec un fichier .wav, bref y'a un truc qui cloche et je sais pas d'où ca sort...
                • Partager sur Facebook
                • Partager sur Twitter
                  4 mai 2021 à 21:53:45

                  Je dis peut être une bétise, mais il me semble me souvenir que pour accéder à une ressource propre à une application, il faut que l'exécution se fasse sur le jar qui contient les ressources. Pas sur un classpath contenant des répertoires de classes.


                  -
                  Edité par michelbillaud 4 mai 2021 à 21:55:06

                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 mai 2021 à 22:49:00

                    michelbillaud a écrit:

                    Je dis peut être une bétise, mais il me semble me souvenir que pour accéder à une ressource propre à une application, il faut que l'exécution se fasse sur le jar qui contient les ressources. Pas sur un classpath contenant des répertoires de classes.


                    -
                    Edité par michelbillaud il y a environ 1 heure


                    Je n'ai pas bien compris, mais en tout cas tout ce que je fais fonctionne pour absolument tout le monde que ce soit sur stackoverflow ou même sur des vidéos youtube. Que j'écris le code copie conforme à ce qu'ils écrivent rien n'y fait...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 mai 2021 à 0:30:33

                      Fang44 a écrit:

                      Donc oui musicUrl est surement nul tout comme le reste finalement... 

                      Et qu'est ce qui t'empêche de le vérifier, histoire de se baser sur des faits plutôt que des suppositions?

                      • Partager sur Facebook
                      • Partager sur Twitter
                        5 mai 2021 à 10:02:25

                        Fang44 a écrit:

                        michelbillaud a écrit:

                        Je dis peut être une bétise, mais il me semble me souvenir que pour accéder à une ressource propre à une application, il faut que l'exécution se fasse sur le jar qui contient les ressources. Pas sur un classpath contenant des répertoires de classes.


                        -
                        Edité par michelbillaud il y a environ 1 heure


                        Je n'ai pas bien compris, mais en tout cas tout ce que je fais fonctionne pour absolument tout le monde que ce soit sur stackoverflow ou même sur des vidéos youtube. Que j'écris le code copie conforme à ce qu'ils écrivent rien n'y fait...


                        Soit il y a une différence que tu ne vois pas parce que tu ne regardes pas au bon endroit, soit les esprits du mal t'ont repéré et t'envoient des ondes négatives, et dans ce cas tu n'y peux rien.

                        Si tu nous montre ce qui marche chez les autres, comment on fait pour voir la différence avec ce qui est chez toi ?

                        "j'ai fait exactement comme les autres et pourtant ça marche pas", ah hem...

                         Les autres, ils n'ont pas

                        Caused by: java.lang.NullPointerException
                        at sample.Main.start(Main.java:30)
                         et nous, on voit pas de ligne 30 dans ton code, donc....

                        -
                        Edité par michelbillaud 5 mai 2021 à 10:05:48

                        • Partager sur Facebook
                        • Partager sur Twitter
                          5 mai 2021 à 17:04:38

                          La fameuse ligne 30 (ou 31) je les ai toutes écrites de différente manières sur mon premier message. Je peux aussi prendre la photo de mes différents fichiers situés dans mon projet: 

                          On vois bel et bien "coin.mp3" qui est dans le dossier principale, je l'ai déplacé dans tous les dossiers de "src" en changeant bien évidement le chemin du String de chacun est objets que j'ai pu instancier. Rien n'y fait encore et toujours un "NullPointerException"... J'ai aussi essayé avec un .wav pensant peut être que mon audio était corrompu, je vous le donne en 1000, "NullPointerException"...

                          Par exemple un topic pris au hasard sur stack overflow:

                          https://stackoverflow.com/questions/23202272/how-to-play-sounds-with-javafx

                          On peux voir sur mon premier message que c'est une des façons que j'ai essayé de faire... 

                          Je tiens aussi à préciser que selon tel ou tel objet je n'ai pas toujours de nullpointerexception qui sont levé. Pour ce code trouvé sur le lien si dessus par exemple j'ai ce message d'erreur:

                          Exception in Application start method
                          java.lang.reflect.InvocationTargetException
                          	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                          	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                          	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                          	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
                          	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
                          	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
                          	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                          	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                          	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                          	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
                          	at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
                          Caused by: java.lang.RuntimeException: Exception in Application start method
                          	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
                          	at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
                          	at java.base/java.lang.Thread.run(Thread.java:834)
                          Caused by: java.lang.IllegalAccessError: class com.sun.media.jfxmediaimpl.NativeMediaManager (in unnamed module @0x60a07ddb) cannot access class com.sun.glass.utils.NativeLibLoader (in module javafx.graphics) because module javafx.graphics does not export com.sun.glass.utils to unnamed module @0x60a07ddb
                          	at com.sun.media.jfxmediaimpl.NativeMediaManager.lambda$new$0(NativeMediaManager.java:136)
                          	at java.base/java.security.AccessController.doPrivileged(Native Method)
                          	at com.sun.media.jfxmediaimpl.NativeMediaManager.<init>(NativeMediaManager.java:107)
                          	at com.sun.media.jfxmediaimpl.NativeMediaManager$NativeMediaManagerInitializer.<clinit>(NativeMediaManager.java:78)
                          	at com.sun.media.jfxmediaimpl.NativeMediaManager.getDefaultInstance(NativeMediaManager.java:90)
                          	at com.sun.media.jfxmedia.MediaManager.canPlayProtocol(MediaManager.java:78)
                          	at com.sun.media.jfxmedia.locator.Locator.<init>(Locator.java:239)
                          	at javafx.scene.media.Media.<init>(Media.java:393)
                          	at sample.Main.start(Main.java:31)
                          	at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
                          	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
                          	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
                          	at java.base/java.security.AccessController.doPrivileged(Native Method)
                          	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
                          	at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
                          	at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
                          	at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277)
                          	... 1 more
                          Exception running application sample.Main
                          
                          Process finished with exit code 1



                          -
                          Edité par Fang44 5 mai 2021 à 17:13:32

                          • Partager sur Facebook
                          • Partager sur Twitter
                            5 mai 2021 à 17:21:56

                            Si tu changes constamment de manière de faire, ainsi que l'emplacement du fichier, et qu'en plus tu ne réponds pas aux questions, c'est juste mission impossible de deviner ce que tu fais, et a fortiori, de t'aider.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              5 mai 2021 à 17:49:05

                              Play50hz a écrit:

                              Si tu changes constamment de manière de faire, ainsi que l'emplacement du fichier, et qu'en plus tu ne réponds pas aux questions, c'est juste mission impossible de deviner ce que tu fais, et a fortiori, de t'aider.


                              Pas du tout j'ai rien touché depuis 2 jours j'ai juste expliqué toutes les méthodes différente que j'ai utilisé jusqu'à présent en fait... Et à quoi je ne répond pas exactement au juste ? Parce que mise à part vous laisse le controle de mon PC je vois pas ce que je peux faire de plus là !
                              • Partager sur Facebook
                              • Partager sur Twitter
                                5 mai 2021 à 17:52:31

                                Fang44 a écrit:


                                J'ai essayé ceci:

                                Media sound = new Media(Paths.get("coin.mp3").toUri().toString());
                                MediaPlayer player = new MediaPlayer(sound);

                                Et puis cela:

                                Code :

                                URL musicURL = getClass().getResource("coin.mpg3");
                                Media media = new Media(musicURL.toExternalForm());
                                MediaPlayer player = new MediaPlayer(media);

                                remarque que tu est passé de mp3 à mpg3, donc il n'est pas impossible que tu te sois planté dans tes tests, et que tu aies tiré des conclusions générales un peu hâtives - genre  j'ai tout bien fait et pourtant ça marche pas -  de manips loupées (ça arrive).

                                Ce qui pourrait aider : une liste précise des fichiers du projet, qu'on sache comment les fichiers s'appellent réellement. Parce que sinon, on ne peut que te donner des conseils qui ne marchent pas.


                                Sous linux on l'obtient avec la commande tree, exemple

                                $ tree ChiFouMi
                                ChiFouMi
                                ├── build.xml
                                ├── manifest.mf
                                ├── nbproject
                                │   ├── build-impl.xml
                                │   ├── genfiles.properties
                                │   ├── private
                                │   │   ├── private.properties
                                │   │   └── private.xml
                                │   ├── project.properties
                                │   └── project.xml
                                ├── src
                                │   └── chifoumi
                                │       ├── ChiFouMi.java
                                │       ├── players
                                │       │   ├── HumanPlayer.java
                                │       │   ├── Imitator.java
                                │       │   ├── Obstinate.java
                                │       │   └── RandomPlayer.java
                                │       └── rules
                                │           ├── Game.java
                                │           ├── Player.java
                                │           └── Shape.java
                                └── test
                                
                                7 directories, 16 files
                                


                                Sous windows aussi, apparemment

                                https://www.computerhope.com/treehlp.htm

                                -
                                Edité par michelbillaud 5 mai 2021 à 18:06:39

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  5 mai 2021 à 18:09:12

                                  Non non j'ai surement fait la faute de frappe en écrivant sur ici sur le forum ce n'est pas un copié collé de mon code actuel mais d'une des différentes méthode que j'ai utilisé. Pour être sur j'ai copié collé ce code avec bel et bien "coin.mp3", "NullPointerException", désolé de faire des conclusion un peux hâtives en ayant essayé 100x avec pleins de maniére possible et inimaginable... 

                                  Bon pour être sur et certain qu'on parle tous de la même chose je vais reposter le code actuel ainsi que le message d'erreur, et arborescence des fichiers:

                                  import javafx.application.Application;
                                  import javafx.scene.Scene;
                                  import javafx.scene.control.Button;
                                  import javafx.scene.layout.BorderPane;
                                  import javafx.scene.media.Media;
                                  import javafx.scene.media.MediaPlayer;
                                  import javafx.stage.Stage;
                                  import java.io.File;
                                  
                                  
                                  public class Main extends Application {
                                  
                                      public static void main(String[] args) {
                                          launch(args);
                                  
                                      }
                                  
                                      @Override
                                      public void start(Stage stage) {
                                          Button button = new Button("click here");
                                  
                                          String sound = "coin.mp3";
                                          Media media = new Media(new File(sound).toURI().toString());
                                          MediaPlayer player = new MediaPlayer(media);
                                  
                                          button.setOnAction((e)-> player.play());
                                  
                                          BorderPane panel = new BorderPane();
                                          panel.setCenter(button);
                                  
                                          Scene scene = new Scene(panel, 250,250);
                                          stage.setScene(scene);
                                          stage.show();
                                  
                                      }
                                  }


                                  Exception in Application start method
                                  java.lang.reflect.InvocationTargetException
                                  	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                                  	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                                  	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                                  	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
                                  	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
                                  	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
                                  	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                                  	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                                  	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                                  	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
                                  	at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
                                  Caused by: java.lang.RuntimeException: Exception in Application start method
                                  	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
                                  	at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
                                  	at java.base/java.lang.Thread.run(Thread.java:834)
                                  Caused by: java.lang.IllegalAccessError: class com.sun.media.jfxmediaimpl.NativeMediaManager (in unnamed module @0x60a07ddb) cannot access class com.sun.glass.utils.NativeLibLoader (in module javafx.graphics) because module javafx.graphics does not export com.sun.glass.utils to unnamed module @0x60a07ddb
                                  	at com.sun.media.jfxmediaimpl.NativeMediaManager.lambda$new$0(NativeMediaManager.java:136)
                                  	at java.base/java.security.AccessController.doPrivileged(Native Method)
                                  	at com.sun.media.jfxmediaimpl.NativeMediaManager.<init>(NativeMediaManager.java:107)
                                  	at com.sun.media.jfxmediaimpl.NativeMediaManager$NativeMediaManagerInitializer.<clinit>(NativeMediaManager.java:78)
                                  	at com.sun.media.jfxmediaimpl.NativeMediaManager.getDefaultInstance(NativeMediaManager.java:90)
                                  	at com.sun.media.jfxmedia.MediaManager.canPlayProtocol(MediaManager.java:78)
                                  	at com.sun.media.jfxmedia.locator.Locator.<init>(Locator.java:239)
                                  	at javafx.scene.media.Media.<init>(Media.java:393)
                                  	at sample.Main.start(Main.java:25)
                                  	at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
                                  	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
                                  	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
                                  	at java.base/java.security.AccessController.doPrivileged(Native Method)
                                  	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
                                  	at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
                                  	at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
                                  	at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277)
                                  	... 1 more
                                  Exception running application sample.Main
                                  
                                  Process finished with exit code 1
                                  


                                  Voilà comme ca pas de faute de frappe, de conclusions "hâtives" et de "NullPointerException"... 

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    5 mai 2021 à 18:52:43

                                    Tu veux nous faire croire que tu n'as rien changé, alors que ce n'est plus le même message ?
                                    Ouais y a juste une erreur

                                    at sample.Main.start(Main.java:25)

                                    à la ligne 25 qui est blanche dans ton source. :-)

                                    En fait tu crois n'avoir rien changé qui aurait un rapport avec le problème.

                                    L'explication ça pourrait être

                                    Caused by: java.lang.IllegalAccessError: class com.sun.media.jfxmediaimpl.NativeMediaManager (in unnamed module @0x60a07ddb) 
                                    cannot access class com.sun.glass.utils.NativeLibLoader (in module javafx.graphics) 
                                    because module javafx.graphics does not export com.sun.glass.utils to unnamed module @0x60a07ddb
                                    


                                    comme dit l'autre,

                                    il manque peut être un import javafx.graphics, ou media, etc.

                                    https://openclassrooms.com/forum/sujet/javafx-avec-intellij-idea

                                    (voir aussi le module-path pour la compilation et l'exécution. Sans moi, depuis que c'est modularisé, j'ai renoncé à comprendre ! et comme je n'utilise pas IntelliJ...)

                                    https://stackoverflow.com/questions/52906773/intellij-idea-error-javafx-runtime-components-are-missing-and-are-required-t

                                    https://stackoverflow.com/questions/52467561/intellij-cant-recognize-javafx-11-with-openjdk-11

                                    -
                                    Edité par michelbillaud 5 mai 2021 à 19:01:11

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      5 mai 2021 à 18:59:35

                                      Excuse moi je n'ai pas copié le nom du package ce qui fait que ca a sauté deux lignes du coup la ligne 25 dans mon code est la ligne 23 sur ce code si dessus pardon. C'est une erreur de ma part.

                                      Et oui je suis sur à 200% que mon soucis ne viens pas du code en lui même mais de quelque chose d'autre, j'ai essayé avec un autre IDE (netbeans) malheureusement j'ai une erreur similaire. Donc si il manque un import.. Pour le coup je suis largué... J'ai toujours des soucis d'installation ou je ne sais quoi depuis que j'ai débuté javaFX je suis à deux doigts de laisser tomber. 

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        5 mai 2021 à 19:07:17

                                        A priori, il a bien trouvé le fichier cette fois.

                                        Tu utilises quelle version de java et quelle version de javafx?

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          5 mai 2021 à 19:17:02

                                          Il y a pas un module-info.java quelque part ?

                                          Parce qu'il y a des chances que les tutoriels datent de java 8, quand les choses étaient plus simples. Ca s'est un peu compliqué quand javafx est devenu un ensemble de modules.

                                          https://dzone.com/articles/javafx-on-jdk-11

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            5 mai 2021 à 19:59:23

                                            Play50hz a écrit:

                                            A priori, il a bien trouvé le fichier cette fois.

                                            Tu utilises quelle version de java et quelle version de javafx?


                                            Java 11.0.10 et javaFX 11.0.2.

                                            michelbillaud a écrit:

                                            Il y a pas un module-info.java quelque part ?

                                            Parce qu'il y a des chances que les tutoriels datent de java 8, quand les choses étaient plus simples. Ca s'est un peu compliqué quand javafx est devenu un ensemble de modules.

                                            https://dzone.com/articles/javafx-on-jdk-11

                                             j'ai trouvé "module-info.class" quand je l'ouvre avec intelliJ il n'y a presque rien:

                                            module org.lwjgl.natives {
                                                requires transitive org.lwjgl;
                                            }

                                            Et pour ce qui est de ton liens, c'est toujours une galéré de créer un nouveau projet en FX. J'ai un manipulation beaucoup plus simple à faire que ce qu'il y a dans ton liens. Mais bon jusqu'à présent tous les composants utilisé en JavaFX ont fonctionné c'est(pour le moment) la premiére fois qu'un object ne fonctionne pas... 

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              5 mai 2021 à 21:07:32

                                              La dernière fois que j'ai joué avec javafx / java 11, le fichier module-in.java contenait

                                              module TestJfx {
                                              	exports test;               // mon package
                                              
                                              	requires     javafx.base;
                                              	requires javafx.controls;
                                              	requires javafx.graphics;
                                              }
                                              

                                              donc des invocations magiques aux modules javafx kivontbien.

                                              Voila mes notes sur le sujet

                                              % Netbeans 11 + Java 11 + JavaFx
                                              % M Billaud
                                              % 14 oct 2019


                                              Source : https://www.youtube.com/watch?v=l9aoicDiQ_A



                                              Rev 30 décembre 2020

                                              # Création d'un projet java


                                              - Lancer netbeans
                                              - nouveau projet : Java with Ant / Java Application
                                              - créer un fichier (New Java / Main Class ), avec le nom
                                              `my.demo.HelloFX`

                                              - dans les propriétés du projet, `libraries`, `modulepath`, `add Jar
                                                Folder`. Naviguer jusqu'à `/usr/share/java`, sélectionner
                                                `java.base.jar`, `java.controls.jar`, `java.graphics.jar`
                                              - dans les propriétés du projet, `Run`, `VM Options`,
                                                    - dans `Main Class`, mettre : `my.demo.HelloFX`
                                                    - dans `VM Options` (sur une seule ligne) mettre
                                                         
                                              ~~~
                                              --module-path=/usr/share/java
                                              --add-modules javafx.controls,javafx.base,javafx.graphics
                                              ~~~


                                              - Dans le package par défaut, créer un fichier "`module info`" :
                                                `New`, `Java Module Info` ... mettre

                                              ~~~
                                              module JavaFX {
                                               
                                                  requires javafx.base;
                                                  requires javafx.controls;
                                                  requires javafx.graphics;
                                                 
                                                  exports org.demo;
                                              }
                                              ~~~

                                              Le nom du module n'a apparemment pas d'importance.


                                              # Le source (org/demo/HelloFX.java) :

                                              ~~~
                                              package org.demo;

                                              import javafx.application.Application;
                                              import javafx.stage.Stage;
                                              import javafx.scene.Scene;
                                              import javafx.scene.control.*;
                                              import javafx.scene.layout.*;

                                              public class HelloFX extends Application {

                                                  /**
                                                   * @param args the command line arguments
                                                   */
                                                  public static void main(String[] args) {
                                                      launch();
                                                  }

                                                  @Override
                                                  public void start(Stage stage) throws Exception {
                                                      Label l = new Label("Hello, world");
                                                      Button b = new Button("ok");
                                                     
                                                      Scene s = new Scene(new Pane(new VBox(l,b)), 600, 400);
                                                      stage.setScene(s);
                                                      stage.show();
                                                  }
                                              }
                                              ~~~

                                              # Problèmes restants :

                                              - Editeur : recherche automatique des dépendances dans
                                              les archives javafx...


                                              -
                                              Edité par michelbillaud 5 mai 2021 à 21:09:22

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                5 mai 2021 à 23:28:53

                                                C'est bizarre que ca vienne des dépendances parce que quand je crée que ce soit un objet "AudioClip", "Media", "MediaPlayer", les imports ce font automatiquement avec intelliJ il les trouve. Donc je ne pense pas que le soucis vienne de là vu que les classes sont accessibles...
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  6 mai 2021 à 9:48:25

                                                  Problème résolu, voir plus loin

                                                  ---

                                                  Est-ce que tu ne confondrais pas

                                                  • les imports des classes
                                                  • les requires des modules  ?
                                                  Que les classes soient accessibles sous l'éditeur quand on tape le texte, ça ne veut pas dire que la bibliothèque (module) qui les contient sera là lors de l'exécution.
                                                  Quand j'ai écris mes notes, si j'ai mis
                                                  dans `VM Options` (sur une seule ligne) mettre

                                                  --module-path=/usr/share/java  --add-modules javafx.controls,javafx.base,javafx.graphics
                                                  c'était pas pour rigoler. C'est parce que sans ça, ça ne marchait pas. Testé et retesté pour être sûr. Mes notes, si je prends du temps pour les écrire, c'est pour que ça soit reproductible (au moins sur mon installation).

                                                  ---

                                                  "c'est bizarre que [.... ] je ne pense pas que le problème vienne de là", ça fait partie des famous last words.

                                                  Ne pas penser que, ça n'a jamais fait disparaître un problème. Si c'est pas ça, tu as une autre idée ?
                                                  -----
                                                  PS Bon, j'ai pris mon courage à deux mains, et avec les pieds qui restent, j'ai programmé un truc,
                                                  Etape 1 : d'abord avec java 8
                                                  package jfx8;
                                                  
                                                  import javafx.application.Application;
                                                  import javafx.application.Platform;
                                                  import javafx.event.ActionEvent;
                                                  import javafx.scene.Scene;
                                                  import javafx.scene.control.Button;
                                                  import javafx.scene.layout.HBox;
                                                  import javafx.scene.media.Media;
                                                  import javafx.scene.media.MediaPlayer;
                                                  import javafx.stage.Stage;
                                                  
                                                  
                                                  public class Demo11 extends Application {
                                                  
                                                      Media mp3file = new Media(getClass().getResource("vibreur.mp3").toExternalForm());
                                                      MediaPlayer player = null;
                                                  
                                                      @Override
                                                      public void start(Stage primaryStage) {
                                                          Button ring = new Button("Ring");
                                                          Button stop = new Button("Stop");
                                                          Button quit = new Button("Quit");
                                                  
                                                          ring.setOnAction(this::demarrer);
                                                          quit.setOnAction(this::quitter);
                                                          stop.setOnAction(this::arreter);
                                                        
                                                          HBox box = new HBox(ring, stop, quit);
                                                  
                                                          Scene scene = new Scene(box, 200, 100);
                                                  
                                                          primaryStage.setTitle("Ring my Bell!");
                                                          primaryStage.setScene(scene);
                                                          primaryStage.show();
                                                      }
                                                  
                                                      private void demarrer(ActionEvent e) {
                                                  
                                                          if (player != null) {
                                                              return;
                                                          }
                                                          player = new MediaPlayer(mp3file);
                                                          player.play();
                                                  
                                                          player.setOnEndOfMedia(() -> {
                                                              arreter(e);  // dont care about the event
                                                          });
                                                      }
                                                  
                                                      public static void main(String[] args) {
                                                          launch(args);
                                                      }
                                                  
                                                      private void quitter(ActionEvent event) {
                                                          Platform.exit();
                                                      }
                                                  
                                                      private void arreter(ActionEvent event) {
                                                          if (player != null) {
                                                              player.stop();
                                                              player = null;
                                                          }
                                                      }
                                                  
                                                  }
                                                  
                                                  Ca marche (mon utilisation des Media n'est peut être pas des plus habiles, mais bon).
                                                  Etape 2, on passe sous Java 11
                                                  - dans le module path, j'ai mis une bibliothèque"My Jfx" où j'ai regroupé les jar de /usr/share/java/javafx*
                                                  - j'ai ajouté un module-info.java contenant
                                                  module Jfx11mod {
                                                      
                                                      exports jfx11;
                                                  
                                                      requires javafx.base;
                                                      requires javafx.controls;
                                                      requires javafx.fxml;
                                                      requires javafx.graphics;
                                                      requires javafx.media;
                                                  }
                                                  

                                                  Etape 3 : comme ça ne marchait toujours pas "couldn't create player" j'ai un peu ouvert les yeux sur internet :il y en a qui ont un problème avec les mp3. Problème de format de fichier, blabla.

                                                  Donc, pour voir, conversion en WAV, et changement pour

                                                      Media wavFile = new Media(getClass().getResource("vibreur.wav").toExternalForm());

                                                  et là ça marche.

                                                  Structure du répertoire source

                                                  src/
                                                  |-- jfx11
                                                  |   |-- Demo11.java
                                                  |   |-- vibreur.mp3        # inutile
                                                  |   `-- vibreur.wav        # ffmeg -i vibreur.mp3 vibreur.wav
                                                  `-- module-info.java
                                                  
                                                  



                                                  -
                                                  Edité par michelbillaud 6 mai 2021 à 12:18:08

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    6 mai 2021 à 14:07:11

                                                    Ok je comprend j'ai ajouté ca en plus dans mes VM option (j'avais déjà une autre ligne mais les deux fonctionnent toujours donc je garde la tienne)

                                                    --add-modules javafx.controls,javafx.base,javafx.graphics

                                                    J'ai aussi changé pour un fichier .wav...

                                                    Maintenant il y a un hic, dans le repertoir où se trouvent tous les jar de javaFX j'ai crée un nouveau "module-info.java", j'ai copié collé et toujours et encore la même erreur... Y'a un truc que je ne suis pas je pense...

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      6 mai 2021 à 14:44:14

                                                      C'est dans les sources, pas avec les jars
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        6 mai 2021 à 14:55:15

                                                        Qu'est-ce que tu appeles "les sources" ? Le dossier src du projet java ? Si oui alors j'ai aussi effectué cette étape. Mais j'optiens ceci:

                                                        Error occurred during initialization of boot layer
                                                        java.lang.module.FindException: Module Jfx11mod not found
                                                        
                                                        Process finished with exit code 1
                                                        

                                                        Je remplace "Jfx11mod" par quoi ? Je ne sais pas à quoi il fait reférence.

                                                        EDIT:

                                                        Bon... J'ai compris... 

                                                        En fait jusqu'au présent pour pouvoir utiliser JavaFX dans un nouveau projet, et pour que la VM puisse se lancer je  faisais ceci: 

                                                        Run -> Edit configurations -> modify options puis cocher la case "Add VM option"

                                                        Et j'avais jusqu'à présent cette ligne 

                                                        --module-path /home/fang44/.local/share/JetBrains/IdeaIC2020.3/javafx-sdk-11.0.2/lib --add-modules javafx.controls,javafx.fxml

                                                        Bon... En gros la réponse est sous les yeux, seulement deux modules sont ajoutés, tandis quand le dossier "lib" du JDK fx il y a "javafx.base, javafx.graphics, javafx.media ect..." 

                                                        Bon je suppose qu'uniquement ajouter "javafx.media" aurais suffit à résoudre mon problème mais j'ai finalement tout ajouté par rage d'un truc aussi stupide qui m'a fait perdre autant de temps et de motivation face à javaFX. Et ca fonctionne avec tous que ce soit "Media + MediaPlayer" ou "Audioclip" il faut parfois utiliser les méthodes getClass().getRessources tantôt "new File().toURI()" ou deplacer dans l'arbre ect.. Bref on s'en fou je me débrouillerai par la suite à comprendre la différence et pourquoi ect... En tout cas ca fonctionne c'est le plus important. 

                                                        Bref... Je vais me passer les nerfs sur quelque chose d'autre je te remercie en tout cas pour ton aide ca m'a permis de trouver la solution.

                                                        Merci aussi de ta patience je te souhaite une bonne journée et bonne continuation :) 

                                                        -
                                                        Edité par Fang44 6 mai 2021 à 16:04:41

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          6 mai 2021 à 16:49:36

                                                          Fang44 a écrit:

                                                          Bon je suppose qu'uniquement ajouter "javafx.media" aurais suffit à résoudre mon problème mais j'ai finalement tout ajouté par rage d'un truc aussi stupide qui m'a fait perdre autant de temps et de motivation face à javaFX. Et ca fonctionne avec tous que ce soit "Media + MediaPlayer" ou "Audioclip" il faut parfois utiliser les méthodes getClass().getRessources tantôt "new File().toURI()" ou deplacer dans l'arbre ect.. Bref on s'en fou je me débrouillerai par la suite à comprendre la différence et pourquoi ect... En tout cas ca fonctionne c'est le plus important. 

                                                          Tu es débutant, alors tu ne sais pas encore que perdre du temps avec des petits trucs stupides de ce genre, ça arrive TOUT LE TEMPS.

                                                          Donc, quand tu arrives par hasard à une solution qui marche, il faut que tu en profites pour éclaircir les choses, et prendre des notes. Parce que ça resservira.

                                                          Là tu écris

                                                          > mais j'ai finalement tout ajouté par rage

                                                          donc ce que tu peux faire

                                                          1. une copie de ce projet qui a le bon goût de marcher

                                                          2. tu enlèves un truc,

                                                          3. tu regardes si ça marche encore

                                                          4. si ça marche pas, tu le remets

                                                          5. tu essaies d'enlever quelque chose d'autre.

                                                          C'est humain de s'énerver et de dire que ça ira bien comme ça et que tu ne veux plus en entendre parler. Sauf que ça te guette au virage pour la prochaine fois, et la fois d'après. Et si tu fais tes débuts avec JavaFx, c'est parce que tu comptes d'en servir plusieurs fois. Et tu n'auras pas confiance dans ce que tu fais, parce que tu sais que c'était au pif. C'est ça qui va te démotiver.

                                                          -
                                                          Edité par michelbillaud 7 mai 2021 à 9:36:05

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          Impossible de jouer un son

                                                          × 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