【问题标题】:Creating instances of a JavaFX Video Player class创建 JavaFX 视频播放器类的实例
【发布时间】:2014-08-16 15:15:52
【问题描述】:

对 Java 相当陌生,并试图自学一些有关 JavaFX 的知识。我正在尝试创建一个在单击视频文件时运行的简单 JavaFX 视频/媒体播放器。 我想将实际播放器创建为一个单独的类,该类接受视频文件位置作为字符串参数。

当我运行下面的,

public class BLPlayer{
    public static void main(String[] args) {
        if(args.length > 0){
            VideoPlayer vp = new VideoPlayer(args);
        }else{
            //showGUI();
        }
    }
}


public class VideoPlayer extends Application {
    String path;
    MediaPlayer player;
    Scene scene;
    MediaView view;
    Group root;
    Media media;

    VideoPlayer(String[] args){
        path = args[0];
        path = path.replace("\\", "/"); 
        launch(args);
    }

    @Override
    public void start(final Stage stage) throws Exception {

        File f = new File(path);

        root = new Group();
        media = new Media(f.toURI().toString());
        player = new MediaPlayer(media);
        view = new MediaView(player);
        root.getChildren().add(view);
        scene = new Scene(root, 400, 400, Color.BLACK);
        stage.setScene(scene);
        stage.show();
        player.play();
    }

}

我得到错误:

Exception in Application constructor
Exception in thread "main" java.lang.RuntimeException: Unable to construct Application instance: class player.VideoPlayer
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:884)
at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:56)
at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:158)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoSuchMethodException: player.VideoPlayer.<init>()
at java.lang.Class.getConstructor0(Class.java:2971)
at java.lang.Class.getConstructor(Class.java:1812)
at com.sun.javafx.application.LauncherImpl$7.run(LauncherImpl.java:790)
at com.sun.javafx.application.PlatformImpl$7.run(PlatformImpl.java:335)
at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:301)
at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:298)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:298)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39)
at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112)

我不知道为什么它不起作用。我将不胜感激任何提示或建议!感谢您的帮助。

【问题讨论】:

    标签: java javafx


    【解决方案1】:

    发生错误是因为您需要使用launch() 启动JavaFX 应用程序。更多详情go through this solution

    如果您确实需要向 VideoPlayer 类发送参数。您可以使用Application 类的getParameters() 获取参数。

    public class VideoPlayer extends Application {
        String path;
        MediaPlayer player;
        Scene scene;
        MediaView view;
        Group root;
        Media media;
    
        @Override
        public void start(final Stage stage) throws Exception {
            Parameters params = getParameters();
            final List<String> parameters = params.getRaw();
            path = !parameters.isEmpty() ? parameters.get(0) : "";
            path = path.replace("\\", "/"); 
            root = new Group();
            File f = new File(path);
            root = new Group();
            media = new Media(f.toURI().toString());
            player = new MediaPlayer(media);
            view = new MediaView(player);
            root.getChildren().add(view);
            scene = new Scene(root, 400, 400, Color.BLACK);
            stage.setScene(scene);
            stage.show();
            player.play();
        }
    }
    

    从另一个类启动 JavaFX 应用程序

    public class BLPlayer {
        public static void main(String[] args) {
            if(args.length > 0){
                Application.launch(VideoPlayer.class, args);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      相关资源
      最近更新 更多