在 Raspberry Pi 3 上使用 JavaFX 11 播放 mp3
Play mp3 with JavaFX 11 on Raspberry Pi 3
我想在 Raspberry Pi 3 上获得 Java 11 和 JavaFX 11 运行。
我在这里按照 Gluon 给出的说明进行操作:http://docs.gluonhq.com/embedded/
(唯一的区别:我是 运行 完整的 Stretch 图像,而不是 Lite,同时 BellSoft 发布了 Liberica JDK 版本 11.0.1 也适用于 ARM,所以我使用了它。)
我的应用程序非常简单:一个标签和一个按钮,当按下按钮时将播放 mp3:
public class HelloFX extends Application
{
@Override
public void start(Stage stage) {
String version = System.getProperty("java.version");
String fxVersion = System.getProperty("javafx.runtime.version");
Label l = new Label ("Java version: " + version + "\nJavaFX version: " + fxVersion);
Button b = new Button("play");
Scene scene = new Scene(new VBox(l, b), 350, 200);
b.setOnAction(
new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
PlayMp3();
}
});
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
Media media;
void PlayMp3()
{
String resource = "/resources/sound.mp3";
media = new Media(getClass().getResource(resource).toURI().toURL().toString());
MediaPlayer mp = new MediaPlayer(media);
mp.play();
}
在 Windows/Eclipse 上运行并播放 mp3。在 Raspberry Pi 上,我可以使用此命令执行应用程序:
sudo /opt/jdk-11.0.1/bin/java --module-path=/opt/armv6hf-sdk/lib/ --add-modules javafx.graphics,javafx.media -cp /home/pi/Java/HelloFX/ -Dprism.verbose=true -Dembedded=monocle -Dglass.platform=Monocle javafx11.HelloFX
图形在显示屏上可见,但当我按下按钮时出现以下异常:
Exception in thread "JavaFX Application Thread" java.lang.UnsatisfiedLinkError: no jfxmedia in java.library.path: [/usr/java/packages/lib, /lib, /usr/lib]
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2660)
at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:829)
at java.base/java.lang.System.loadLibrary(System.java:1867)
at javafx.graphics/com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:150)
at javafx.graphics/com.sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.java:62)
at javafx.media/com.sun.media.jfxmediaimpl.NativeMediaManager.lambda$new[=13=](NativeMediaManager.java:136)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.media/com.sun.media.jfxmediaimpl.NativeMediaManager.<init>(NativeMediaManager.java:107)
at javafx.media/com.sun.media.jfxmediaimpl.NativeMediaManager$NativeMediaManagerInitializer.<clinit>(NativeMediaManager.java:78)
at javafx.media/com.sun.media.jfxmediaimpl.NativeMediaManager.getDefaultInstance(NativeMediaManager.java:90)
at javafx.media/com.sun.media.jfxmedia.MediaManager.canPlayProtocol(MediaManager.java:78)
at javafx.media/com.sun.media.jfxmedia.locator.Locator.<init>(Locator.java:239)
at javafx.media/javafx.scene.media.Media.<init>(Media.java:393)
at javafx11.HelloFX.PlayMp3(HelloFX.java:62)
我发现一些帖子说此错误消息意味着 Java 正在寻找一个名为 "libjfxmedia.so" 的库,但我无法在任何地方找到该文件。
我有没有犯错或遗漏了什么?
我是否需要更改 java 命令中的某些内容才能执行应用程序? (我不确定 --add-modules 参数,它在没有这个选项的情况下运行相同...)
有没有可能 JavaFX 11 仍然不支持 Raspberry Pi 上的媒体(我读到 Gluon 也提供了 v8,但不支持)?向谁请教近期会不会支持?
José Pereda 写的是正确的,javafx.media 没有包含,它也没有包含在 11 版本中。
但同时事情发生了变化,BellSoft 最近发布了他们的 Liberica 软件包(Java 包括 JavaFX)版本 14.0.1,现在可以播放 mp3:
https://bell-sw.com/pages/downloads/?version=java-14&release=14.0.1+8&os=Linux&bitness=32-bit&architecture=ARM&package=jdk-full
仍然存在一些小错误(例如 mp3 文件名不能包含空格,任何 mp3 的长度总是无限的)但基础工作正常,它甚至可以播放视频,只需查看他们的博客:
https://bell-sw.com/announcements/2019/09/12/JDK-JavaFX-Video-Preview/
请确保真正使用 14.0.1 而不是第一个 14 版本,因为有几个修复尤其是。因为 Raspberry Pi 已在那里实施。
感谢 BellSoft 团队的出色工作!
我想在 Raspberry Pi 3 上获得 Java 11 和 JavaFX 11 运行。 我在这里按照 Gluon 给出的说明进行操作:http://docs.gluonhq.com/embedded/ (唯一的区别:我是 运行 完整的 Stretch 图像,而不是 Lite,同时 BellSoft 发布了 Liberica JDK 版本 11.0.1 也适用于 ARM,所以我使用了它。)
我的应用程序非常简单:一个标签和一个按钮,当按下按钮时将播放 mp3:
public class HelloFX extends Application
{
@Override
public void start(Stage stage) {
String version = System.getProperty("java.version");
String fxVersion = System.getProperty("javafx.runtime.version");
Label l = new Label ("Java version: " + version + "\nJavaFX version: " + fxVersion);
Button b = new Button("play");
Scene scene = new Scene(new VBox(l, b), 350, 200);
b.setOnAction(
new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
PlayMp3();
}
});
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
Media media;
void PlayMp3()
{
String resource = "/resources/sound.mp3";
media = new Media(getClass().getResource(resource).toURI().toURL().toString());
MediaPlayer mp = new MediaPlayer(media);
mp.play();
}
在 Windows/Eclipse 上运行并播放 mp3。在 Raspberry Pi 上,我可以使用此命令执行应用程序:
sudo /opt/jdk-11.0.1/bin/java --module-path=/opt/armv6hf-sdk/lib/ --add-modules javafx.graphics,javafx.media -cp /home/pi/Java/HelloFX/ -Dprism.verbose=true -Dembedded=monocle -Dglass.platform=Monocle javafx11.HelloFX
图形在显示屏上可见,但当我按下按钮时出现以下异常:
Exception in thread "JavaFX Application Thread" java.lang.UnsatisfiedLinkError: no jfxmedia in java.library.path: [/usr/java/packages/lib, /lib, /usr/lib]
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2660)
at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:829)
at java.base/java.lang.System.loadLibrary(System.java:1867)
at javafx.graphics/com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:150)
at javafx.graphics/com.sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.java:62)
at javafx.media/com.sun.media.jfxmediaimpl.NativeMediaManager.lambda$new[=13=](NativeMediaManager.java:136)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.media/com.sun.media.jfxmediaimpl.NativeMediaManager.<init>(NativeMediaManager.java:107)
at javafx.media/com.sun.media.jfxmediaimpl.NativeMediaManager$NativeMediaManagerInitializer.<clinit>(NativeMediaManager.java:78)
at javafx.media/com.sun.media.jfxmediaimpl.NativeMediaManager.getDefaultInstance(NativeMediaManager.java:90)
at javafx.media/com.sun.media.jfxmedia.MediaManager.canPlayProtocol(MediaManager.java:78)
at javafx.media/com.sun.media.jfxmedia.locator.Locator.<init>(Locator.java:239)
at javafx.media/javafx.scene.media.Media.<init>(Media.java:393)
at javafx11.HelloFX.PlayMp3(HelloFX.java:62)
我发现一些帖子说此错误消息意味着 Java 正在寻找一个名为 "libjfxmedia.so" 的库,但我无法在任何地方找到该文件。
我有没有犯错或遗漏了什么?
我是否需要更改 java 命令中的某些内容才能执行应用程序? (我不确定 --add-modules 参数,它在没有这个选项的情况下运行相同...)
有没有可能 JavaFX 11 仍然不支持 Raspberry Pi 上的媒体(我读到 Gluon 也提供了 v8,但不支持)?向谁请教近期会不会支持?
José Pereda 写的是正确的,javafx.media 没有包含,它也没有包含在 11 版本中。 但同时事情发生了变化,BellSoft 最近发布了他们的 Liberica 软件包(Java 包括 JavaFX)版本 14.0.1,现在可以播放 mp3: https://bell-sw.com/pages/downloads/?version=java-14&release=14.0.1+8&os=Linux&bitness=32-bit&architecture=ARM&package=jdk-full
仍然存在一些小错误(例如 mp3 文件名不能包含空格,任何 mp3 的长度总是无限的)但基础工作正常,它甚至可以播放视频,只需查看他们的博客: https://bell-sw.com/announcements/2019/09/12/JDK-JavaFX-Video-Preview/
请确保真正使用 14.0.1 而不是第一个 14 版本,因为有几个修复尤其是。因为 Raspberry Pi 已在那里实施。
感谢 BellSoft 团队的出色工作!