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.
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
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...
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.
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...
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....
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:
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
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.
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à !
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
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"...
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.
(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...)
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.
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.
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:
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...
- 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
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...
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.
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*
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());
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...
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 :)
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
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.
PXL Le retro gaming facile Thread sur le forum: https://openclassrooms.com/forum/sujet/retro-pxl
PXL Le retro gaming facile Thread sur le forum: https://openclassrooms.com/forum/sujet/retro-pxl
PXL Le retro gaming facile Thread sur le forum: https://openclassrooms.com/forum/sujet/retro-pxl
PXL Le retro gaming facile Thread sur le forum: https://openclassrooms.com/forum/sujet/retro-pxl
PXL Le retro gaming facile Thread sur le forum: https://openclassrooms.com/forum/sujet/retro-pxl
PXL Le retro gaming facile Thread sur le forum: https://openclassrooms.com/forum/sujet/retro-pxl