Слушать mp3 с JavaFX 11 на Raspberry Pi 3 - PullRequest
0 голосов
/ 23 декабря 2018

Мне бы хотелось, чтобы Java 11 и JavaFX 11 работали на Raspberry Pi 3. Я следовал инструкциям, данным 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$0(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 все еще не поддерживает Media на Raspberry Pi (я читал, чтоv8, также предоставленный Глюоном, не сделал?Кого спросить, будет ли он поддерживаться в ближайшее время?

...