不兼容的类型:javafx.scene.media.Media 无法转换为 javax.print.attribute.standard.Media
Incompatible Types: javafx.scene.media.Media cannot be converted to javax.print.attribute.standard.Media
全部,
我正在使用 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
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();
}
}
}
}
在controller.java文件中,传递的视频参数返回到javafx.scene.media.Media,但目的是从javax.print.attribute.standard.Media中指定videoItem.java。已导入 javax.print.attribute.standard.Media 但没有用,因为两者的媒体命名约定相同。
我正在尝试建立一个打开的视频列表,如下所示:
MediaPlayer SceneBuilder Screenshot
非常感谢任何可以帮助我的人。
干杯
我猜是新手错误。 videoItem 文件永远不应包含 javax.print.attribute.standard.Media,而应包含 javafx.scene.media.Media.
全部,
我正在使用 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
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();
}
}
}
}
在controller.java文件中,传递的视频参数返回到javafx.scene.media.Media,但目的是从javax.print.attribute.standard.Media中指定videoItem.java。已导入 javax.print.attribute.standard.Media 但没有用,因为两者的媒体命名约定相同。
我正在尝试建立一个打开的视频列表,如下所示:
MediaPlayer SceneBuilder Screenshot
非常感谢任何可以帮助我的人。
干杯
我猜是新手错误。 videoItem 文件永远不应包含 javax.print.attribute.standard.Media,而应包含 javafx.scene.media.Media.