Java Illegal Argument在运行我的java应用程序时出现异常

时间:2017-11-03 13:10:24

标签: java javafx

我正在尝试使用java构建一个小型视频播放器我遇到了一些错误,请帮我修复它们。



package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.paint.Color;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Player player = new Player("/Users/name/Desktop/play.mp4");
        Scene scene = new Scene(player, 720,480,Color.BLACK);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}






package sample;

import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;

/**
 * Created by akanksh on 03/11/17.
 */
public class Player extends BorderPane {
    Media media;
    MediaPlayer player;
    MediaView view;
    Pane mpane;
    public Player(String file){

        media = new Media(file);
        player = new MediaPlayer(media);
        view = new MediaView(player);
        mpane = new Pane();

        mpane.getChildren().add(view);

        setCenter(mpane);
        player.play();

    }
}



 错误:

enter image description here

无论我多少次尝试使用不同的视频和不同的路径,它都不起作用......需要帮助...

2 个答案:

答案 0 :(得分:1)

媒体类需要有效的URI

因此你需要一个"架构"对于您的文件,例如file:///Users/...

或者您可以使用new File("/Users/name/Desktop/play.mp4").toURI()

答案 1 :(得分:0)

媒体构造函数正在寻找URI,而不是文件路径。如果您确实为媒体指定了一个文件(即用户在文件系统上指定的内容,例如通过FileChooser),您应该将路径转换为有效 URI,一个方案并正确编码路径中的任何无效字符,例如空格。

如果您有File个对象,只需使用

执行此操作即可
File file = ... ;
Media media = new Media(file.toURI().toString());

如果文件被指定为字符串,则首先创建一个文件对象(尽管在任何实际情况下,您应该首先使用File):

public Player(String file){

    media = new Media(new File(file).toURI().toString());
    player = new MediaPlayer(media);
    view = new MediaView(player);
    mpane = new Pane();

    mpane.getChildren().add(view);

    setCenter(mpane);
    player.play();

}

请注意,如果媒体是应用程序的一部分(而不是在运行时在用户的文件系统上提供),则应完全使用不同的技术并将其视为资源。例如,请参阅How to reference javafx fxml files in resource folder?以访问JavaFX中的资源。

相关问题