简体   繁体   English

不兼容类型:javafx.scene.media.Media 无法转换为 javax.print.attribute.standard.Media

[英]Incompatible Types: javafx.scene.media.Media cannot be converted to javax.print.attribute.standard.Media

All,全部,

I'm building a media player using Amazon Corretto 11 library and OpenJFX.我正在使用 Amazon Corretto 11 库和 OpenJFX 构建媒体播放器。 I have this issue that's keeping me on the struggle.我有这个问题让我一直在挣扎。 Still a newbie in Java, it will be much appreciated if someone can help me out on this.仍然是 Java 的新手,如果有人能帮助我解决这个问题,将不胜感激。

Error while compiling:
D:\Java Masterclass\Media_Player\src\main\controller.java:30:59
java: incompatible types: javafx.scene.media.Media cannot be converted to javax.print.attribute.standard.Media
Main.java file:

package main;

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

import java.io.IOException;

public class main extends Application {

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

    @Override
    public void start(Stage primaryStage) throws IOException {
        controller.primaryStage = primaryStage;
        Parent root = FXMLLoader.load(getClass().getResource("main.fxml"));
        primaryStage.setTitle("Media Player");
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }
}
Main.fxml file:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.media.*?>

<BorderPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="main.controller">
   <top>
      <MenuBar BorderPane.alignment="CENTER">
        <menus>
          <Menu mnemonicParsing="false" text="Video">
            <items>
              <MenuItem mnemonicParsing="false" onAction="#loadVideo" text="Load" />
            </items>
          </Menu>
        </menus>
      </MenuBar>
   </top>
   <left>
      <ListView fx:id="videoList" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
   </left>
   <bottom>
      <Button mnemonicParsing="false" onMouseClicked="#toggleVideoPlay" prefHeight="26.0" prefWidth="95.0" text="Play / Pause" BorderPane.alignment="CENTER" />
   </bottom>
   <center>
      <MediaView fx:id="player" fitHeight="400.0" fitWidth="600.0" BorderPane.alignment="CENTER" />
   </center>
</BorderPane>
videoItem.java file:

package customViews;

import javafx.scene.control.Label;

import javax.print.attribute.standard.Media;

public class videoItem extends Label {

    private Media video;

    public videoItem(String videoPath, Media video){
        this.video = video;
        super.setText("Video name: "+ getVideoName(videoPath));
    }

    private String getVideoName(String videoPath) {
        String[] pathParts = videoPath.split("/");
        return pathParts[pathParts.length - 1];
    }

    public Media getVideo() {
        return video;
    }
}
Controller.java file:

package main;

import customViews.videoItem;
import javafx.event.ActionEvent;
import javafx.scene.control.ListView;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.FileChooser;
import javafx.stage.Stage;

public class controller {
    static Stage primaryStage;
    public MediaView player;
    public ListView<videoItem> videoList;

    public void loadVideo(ActionEvent actionEvent) {
        FileChooser fileChooser = new FileChooser();
        fileChooser.setTitle("Open Video File");
        String videoPath = fileChooser.showOpenDialog(primaryStage).toURI().toString();
        Media video = new Media(videoPath);
        playVideo(video);

        addToLibrary(videoPath, video);
    }

    private void addToLibrary(String videoPath, Media video) {
        videoList.getItems().add(new videoItem(videoPath, **video**));
    }

    private void playVideo(Media video) {
        MediaPlayer mediaPlayer = new MediaPlayer(video);
        mediaPlayer.setAutoPlay(false);
        player.setMediaPlayer(mediaPlayer);
    }

    public void toggleVideoPlay(MouseEvent mouseEvent) {
        if(mouseEvent.getButton().equals(MouseButton.PRIMARY)){
            if (player.getMediaPlayer().getStatus().equals(MediaPlayer.Status.PLAYING)){
                player.getMediaPlayer().pause();
            } else {
                player.getMediaPlayer().play();
            }
        }
    }
}

In controller.java file, the video parameter passed goes back to javafx.scene.media.Media, but the intention is to have it from javax.print.attribute.standard.Media specified in videoItem.java. In controller.java file, the video parameter passed goes back to javafx.scene.media.Media, but the intention is to have it from javax.print.attribute.standard.Media specified in videoItem.java. Imported javax.print.attribute.standard.Media but that didn't work, as both as the same Media naming conventions.导入了 javax.print.attribute.standard.Media 但这不起作用,因为两者都是相同的媒体命名约定。

I am trying to build a list of opened videos, per below:我正在尝试建立一个打开的视频列表,如下所示:

MediaPlayer SceneBuilder Screenshot MediaPlayer 场景生成器截图

Thanks a mil for anyone that can help me on this.感谢任何可以帮助我的人。

Cheers干杯

Newbie mistake I guess.我猜是新手错误。 videoItem file should never contain javax.print.attribute.standard.Media but rather javafx.scene.media.Media. videoItem 文件不应包含 javax.print.attribute.standard.Media,而应包含 javafx.scene.media.Media。

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM