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

不兼容的类型:javafx.scene.media.media无法转换为javax.print.attribute.standard.media,java,user-interface,javafx,media-player,corretto,Java,User Interface,Javafx,Media Player,Corretto,全部, 我正在使用Amazon Corretto 11库和OpenJFX构建一个媒体播放器。我有一个问题让我一直在挣扎。还是一个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 t

全部,

我正在使用Amazon Corretto 11库和OpenJFX构建一个媒体播放器。我有一个问题让我一直在挣扎。还是一个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
Controller.java文件:
主包装;
导入customViews.videoItem;
导入javafx.event.ActionEvent;
导入javafx.scene.control.ListView;
导入javafx.scene.input.MouseButton;
导入javafx.scene.input.MouseEvent;
导入javafx.scene.media.media;
导入javafx.scene.media.MediaPlayer;
导入javafx.scene.media.MediaView;
导入javafx.stage.FileChooser;
导入javafx.stage.stage;
公共类控制器{
静态阶段初级阶段;
公共媒体播放器;
公共列表视图视频列表;
公共void加载视频(ActionEvent ActionEvent){
FileChooser FileChooser=newfilechooser();
setTitle(“打开视频文件”);
字符串videoPath=fileChooser.showOpenDialog(primaryStage.toURI().toString();
媒体视频=新媒体(视频路径);
播放视频(视频);
addToLibrary(视频路径、视频);
}
私有void addToLibrary(字符串视频路径、媒体视频){
videoList.getItems().add(新的videoItem(videoPath,**video**));
}
私人视频播放(媒体视频){
MediaPlayer=新的MediaPlayer(视频);
mediaPlayer.setAutoPlay(false);
player.setMediaPlayer(mediaPlayer);
}
公共无效切换视频播放(MouseEvent MouseEvent){
if(mouseEvent.getButton().equals(MouseButton.PRIMARY)){
if(player.getMediaPlayer().getStatus().equals(MediaPlayer.Status.PLAYING)){
player.getMediaPlayer().pause();
}否则{
player.getMediaPlayer().play();
}
}
}
}
在controller.java文件中,传递的视频参数返回到javafx.scene.media.media,但目的是从videoItem.java中指定的javax.print.attribute.standard.media获取该参数。导入了javax.print.attribute.standard.Media,但这不起作用,因为两者的媒体命名约定相同

我正在尝试建立一个已打开视频列表,如下所示:

非常感谢任何能在这方面帮助我的人


干杯

我猜是新手犯的错误。videoItem文件不应包含javax.print.attribute.standard.Media,而应包含javafx.scene.Media.Media。

在Java中不能这样做。您的IntelliJ IDE应该给您一个警告/错误提示。要解决这个问题,您必须将对象从javax…Media转换为javafx…Media,因为它是不同的类,就是这样!谢谢我所要做的就是在videoItem中用import javafx.scene.Media.Media替换import javax.print.attribute.standard.Media,现在一切都好了。请使用java命名约定..自动导入具有相同简单名称的类(在不同的包中)可能会出错(正如错误告诉您的那样),发生在不同的体验级别:)
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();
            }
        }
    }
}