当JavaFX程序启动时,我try 使用以下代码 struct 播放音频文件:
private void playSound() {
try {
Media media = new Media(
getClass()
.getResource("/audio/maze-sound.wav")
.toExternalForm()
);
this.mediaPlayer = new MediaPlayer(media);
this.mediaPlayer.play();
} catch (Exception e) {
e.printStackTrace();
}
}
出乎意料的是,我收到了以下异常,这是不应该发生的,因为我添加了媒体依赖项,并且它也应该具有所有其他依赖项.
Loading library gstreamer-lite from resource failed: java.lang.UnsatisfiedLinkError: C:\Users\gc\.openjfx\cache\21+31\amd64\gstreamer-lite.dll: Can't find dependent libraries
java.lang.UnsatisfiedLinkError: C:\Users\gc\.openjfx\cache\21+31\amd64\gstreamer-lite.dll: Can't find dependent libraries
at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:331)
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:197)
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:139)
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2418)
at java.base/java.lang.Runtime.load0(Runtime.java:852)
at java.base/java.lang.System.load(System.java:2021)
at javafx.graphics@21/com.sun.glass.utils.NativeLibLoader.installLibraryFromResource(NativeLibLoader.java:218)
at javafx.graphics@21/com.sun.glass.utils.NativeLibLoader.loadLibraryFromResource(NativeLibLoader.java:198)
at javafx.graphics@21/com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:140)
at javafx.graphics@21/com.sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.java:56)
at javafx.media@21/com.sun.media.jfxmediaimpl.NativeMediaManager.lambda$new$0(NativeMediaManager.java:115)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:571)
at javafx.media@21/com.sun.media.jfxmediaimpl.NativeMediaManager.<init>(NativeMediaManager.java:108)
at javafx.media@21/com.sun.media.jfxmediaimpl.NativeMediaManager$NativeMediaManagerInitializer.<clinit>(NativeMediaManager.java:78)
at javafx.media@21/com.sun.media.jfxmediaimpl.NativeMediaManager.getDefaultInstance(NativeMediaManager.java:90)
at javafx.media@21/com.sun.media.jfxmedia.MediaManager.canPlayProtocol(MediaManager.java:78)
at javafx.media@21/com.sun.media.jfxmedia.locator.Locator.<init>(Locator.java:240)
at javafx.media@21/javafx.scene.media.Media.<init>(Media.java:392)
at com.algorithms.maze/com.algorithms.maze.App.playSound(App.java:34)
at com.algorithms.maze/com.algorithms.maze.App.start(App.java:26)
at javafx.graphics@21/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:839)
at javafx.graphics@21/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:483)
at javafx.graphics@21/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:456)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
at javafx.graphics@21/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:455)
at javafx.graphics@21/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at javafx.graphics@21/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics@21/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:185)
at java.base/java.lang.Thread.run(Thread.java:1583)
Exception in Application start method
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at javafx.graphics@21/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
at javafx.graphics@21/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:364)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1135)
Caused by: java.lang.RuntimeException: Exception in Application start method
at javafx.graphics@21/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:893)
at javafx.graphics@21/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.UnsatisfiedLinkError: no gstreamer-lite in java.library.path: C:\Program Files\Eclipse Adoptium\jdk-21.0.1.12-hotspot\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files\Eclipse Adoptium\jdk-21.0.1.12-hotspot\bin;C:\ffmpeg\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\gc\AppData\Local\Microsoft\WindowsApps;C:\Program Files\Git\cmd;C:\Users\gc\AppData\Local\Microsoft\WindowsApps;.
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2458)
at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:916)
at java.base/java.lang.System.loadLibrary(System.java:2059)
at javafx.graphics@21/com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:168)
at javafx.graphics@21/com.sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.java:56)
at javafx.media@21/com.sun.media.jfxmediaimpl.NativeMediaManager.lambda$new$0(NativeMediaManager.java:115)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:571)
at javafx.media@21/com.sun.media.jfxmediaimpl.NativeMediaManager.<init>(NativeMediaManager.java:108)
at javafx.media@21/com.sun.media.jfxmediaimpl.NativeMediaManager$NativeMediaManagerInitializer.<clinit>(NativeMediaManager.java:78)
at javafx.media@21/com.sun.media.jfxmediaimpl.NativeMediaManager.getDefaultInstance(NativeMediaManager.java:90)
at javafx.media@21/com.sun.media.jfxmedia.MediaManager.canPlayProtocol(MediaManager.java:78)
at javafx.media@21/com.sun.media.jfxmedia.locator.Locator.<init>(Locator.java:240)
at javafx.media@21/javafx.scene.media.Media.<init>(Media.java:392)
at com.algorithms.maze/com.algorithms.maze.App.playSound(App.java:34)
at com.algorithms.maze/com.algorithms.maze.App.start(App.java:26)
at javafx.graphics@21/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:839)
at javafx.graphics@21/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:483)
at javafx.graphics@21/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:456)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
at javafx.graphics@21/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:455)
at javafx.graphics@21/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at javafx.graphics@21/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics@21/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:185)
... 1 more
Exception running application com.algorithms.maze.App
Pom.xml依赖项:
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>21</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-media</artifactId>
<version>21</version>
</dependency>
</dependencies>
项目 struct :
C:.
| .gitignore
| mvnw
| mvnw.cmd
| pom.xml
|
+---.idea
| .gitignore
| compiler.xml
| encodings.xml
| jarRepositories.xml
| misc.xml
| uiDesigner.xml
| vcs.xml
| workspace.xml
|
+---.mvn
| \---wrapper
| maven-wrapper.jar
| maven-wrapper.properties
|
\---src
\---main
+---java
| | module-info.java
| |
| \---com
| \---algorithms
| \---maze
| App.java
| Cell.java
| MazeController.java
| MazeModel.java
| MazeView.java
|
\---resources
| 1322301.png
|
\---audio
maze-sound.wav