简体   繁体   English

JavaFX MediaPlayer抛出java.lang.reflect.InvocationTargetException

[英]JavaFX MediaPlayer throws java.lang.reflect.InvocationTargetException

I've been trying to experiment with the JavaFX MediaPlayer class, and found the following example code in a different thread: 我一直在尝试JavaFX MediaPlayer类,并在另一个线程中找到以下示例代码:

import java.net.URI;
import java.net.URISyntaxException;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.Stage;

public class test extends Application {

    @Override
    public void start(Stage primaryStage)
    {
        //Add a scene
        Group root = new Group();
        Scene scene = new Scene(root, 500, 200);
        URI file = null;
        try {
            file = new URI("/home/thomas/voodoo.mp3");
        } catch (URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("POOR URI SYNTAX");
        }
        Media pick = new Media(file.toString());
        MediaPlayer player = new MediaPlayer(pick);
        player.play();

        //Add a mediaView, to display the media. Its necessary !
        //This mediaView is added to a Pane
        MediaView mediaView = new MediaView(player);
        ((Group)scene.getRoot()).getChildren().add(mediaView);

        //show the stage
        primaryStage.setTitle("Media Player");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    public static void main(String[] args) {
         launch(args);
    }
}

I adjusted the file path to point to a real audio file (/home/thomas/voodoo.mp3) and tried running it, but the console output is the following: 我将文件路径调整为指向真实音频文件(/home/thomas/voodoo.mp3)并尝试运行它,但控制台输出如下:

Exception in Application start method
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$1(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: uri.getScheme() == null! uri == '/home/thomas/voodoo.mp3'
    at com.sun.media.jfxmedia.locator.Locator.<init>(Locator.java:211)
    at javafx.scene.media.Media.<init>(Media.java:393)
    at test.start(test.java:28)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$7(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$6(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$5(GtkApplication.java:139)
    ... 1 more
Exception running application test

Is there something wrong with my setup, or with my code? 我的设置或代码有问题吗?

Thanks for the help! 谢谢您的帮助!

EDIT: 编辑:

Changed to Media pick = new Media(new File("/home/thomas/voodoo.mp3").toURI().toString()); 更改为Media pick = new Media(new File("/home/thomas/voodoo.mp3").toURI().toString()); as per Nash's suggestion, but it still doesn't work. 按照纳什的建议,但这仍然行不通。 The console output is a little different now, though. 但是,控制台输出现在有所不同。

Exception in Application start method
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$1(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:745)
Caused by: MediaException: UNKNOWN : com.sun.media.jfxmedia.MediaException: Could not create player! : com.sun.media.jfxmedia.MediaException: Could not create player!
    at javafx.scene.media.MediaException.exceptionToMediaException(MediaException.java:146)
    at javafx.scene.media.MediaPlayer.init(MediaPlayer.java:511)
    at javafx.scene.media.MediaPlayer.<init>(MediaPlayer.java:414)
    at test.start(test.java:20)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$7(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$6(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$5(GtkApplication.java:139)
    ... 1 more
Caused by: com.sun.media.jfxmedia.MediaException: Could not create player!
    at com.sun.media.jfxmediaimpl.NativeMediaManager.getPlayer(NativeMediaManager.java:274)
    at com.sun.media.jfxmedia.MediaManager.getPlayer(MediaManager.java:118)
    at javafx.scene.media.MediaPlayer.init(MediaPlayer.java:467)
    ... 11 more
Exception running application test

The problem is your url /home/thomas/voodoo.mp3 that is not valid, indeed the scheme is missing as described into your error message ( uri.getScheme() == null! uri == '/home/thomas/voodoo.mp3' ), it should start with file:// as it is a file in your local file system such that it should be file:///home/thomas/voodoo.mp3 . 问题是您的URL /home/thomas/voodoo.mp3无效,确实确实丢失了该方案,如错误消息中所述( uri.getScheme() == null! uri == '/home/thomas/voodoo.mp3' ),它应以file://开头,因为它是本地文件系统中的文件,因此应为file:///home/thomas/voodoo.mp3

But since it is too error prone to build the URI as you currently do because you must ensure that it is properly URL encoded (spaces should be for example replaced with %20 ) and you need to provide a valid scheme, you had better to use new File(path).toURI().toString() as proposed by Nash . 但是由于像现在那样构建URI很容易出错,因为必须确保URL编码正确(例如,应将空格替换为%20 ),并且需要提供有效的方案,因此最好使用Nash提出的new File(path).toURI().toString()

尝试

Media pick = new Media(new File("/home/thomas/voodoo.mp3").toURI().toString());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 java.lang.reflect.InvocationTargetException JavaFX TableView - java.lang.reflect.InvocationTargetException JavaFX TableView javafx中的java.lang.reflect.InvocationTargetException中的异常 - Exception in java.lang.reflect.InvocationTargetException in javafx javaFx中的java.lang.reflect.InvocationTargetException - java.lang.reflect.InvocationTargetException in javaFx Javafx mediaViewer / mediaPlayer引发java.lang.reflect.InvocationTargetException和java.lang.NullPointerException - Javafx mediaViewer/mediaPlayer throwing java.lang.reflect.InvocationTargetException and java.lang.NullPointerException JavaFX,Scene Builder (IntelliJ) 程序从 StackOverFlow 抛出 java.lang.reflect.InvocationTargetException - JavaFX, Scene Builder (IntelliJ) program throws java.lang.reflect.InvocationTargetException from StackOverFlow java.lang.reflect.InvocationTargetException - java.lang.reflect.InvocationTargetException java.lang.reflect.InvocationTargetException? - java.lang.reflect.InvocationTargetException? 如何在JavaFX中交换控制器? java.lang.reflect.InvocationTargetException - How to swap controllers in JavaFX? java.lang.reflect.InvocationTargetException JavaFX:应用程序启动方法中的异常 java.lang.reflect.InvocationTargetException - JavaFX: Exception in Application Start Method java.lang.reflect.InvocationTargetException Apache POI工作簿引发java.lang.reflect.InvocationTargetException - Apache POI Workbook throws java.lang.reflect.InvocationTargetException
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM