在Java中传递文件位置时出错
我正在尝试用Java创建一个媒体播放器。 为了做到这一点,我在文件所在的位置传递了一个字符串,但得到了一个错误 操作系统:MacOSX在Java中传递文件位置时出错,java,javafx,Java,Javafx,我正在尝试用Java创建一个媒体播放器。 为了做到这一点,我在文件所在的位置传递了一个字符串,但得到了一个错误 操作系统:MacOSX IDE:Pycharm @Override public void start(Stage primaryStage) throws Exception{ String file="~/Users/ViditShah/IdeaProjects/MediaPlayer/src/sample/1.mp4"; Player player = new
IDE:Pycharm
@Override
public void start(Stage primaryStage) throws Exception{
String file="~/Users/ViditShah/IdeaProjects/MediaPlayer/src/sample/1.mp4";
Player player = new Player(file);
Scene scene = new Scene(player,720,480, Color.BLACK);
primaryStage.setScene(scene);
primaryStage.show();
}
球员级别:
public class Player extends BorderPane {
Media media;
MediaPlayer player;
MediaView view;
Pane apane;
Player(String file)
{
media =new Media(file);
player = new MediaPlayer(media);
view = new MediaView(player);
apane.getChildren().add(view);
setCenter(apane);
}
}
解析文件字符串时显示错误。
我想我在定位文件路径时犯了一个错误,未能找到解决方案。您显然是在试图将文件系统路径传递给构造函数。根据报告: 媒体类表示媒体资源。它是从源URI的字符串形式实例化的 及 源必须表示有效的URI,并且是不可变的。仅支持HTTP、文件和JAR URL。如果提供的URL无效,则将引发异常 因此,将文件系统路径传递给
媒体
构造函数是毫无意义的。您必须将URI的字符串形式传递给它
这里可能有两种不同的情况(出于某种原因,您拒绝澄清您正在尝试做的事情)。您可能正在尝试播放属于应用程序一部分的视频,在这种情况下,视频将在部署应用程序时包含在应用程序的jar文件中,或者您正在尝试在运行时播放用户提供的视频
在前一种情况下,您基本上需要从JVM加载类的任何地方加载视频(无论是文件系统,通常在开发期间,还是从jar文件,通常在部署应用程序之后)。为此,您从类加载器获取URI
如果视频与当前类位于同一软件包中,则可以执行以下操作:
String videoURI = getClass().getResource("1.mp4").toURI().toString();
然后(通过播放器
构造函数)将其传递给媒体
构造函数
或者更一般地说,您可以以/
开头资源名称,在这种情况下,将相对于类路径搜索资源名称:
String videoURI = getClass().getResource("/sample/1.mp4").toURI().toString();
另一方面,如果正在播放用户提供的视频,则可以从文件
对象创建URI:
File file = ... ;
String videoURI = file.toURI().toString();
例如,您可以执行以下操作:
FileChooser chooser = new FileChooser();
chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("mp4 video files", "*.mp4"));
File file = chooser.showOpenDialog(primaryStage);
if (file != null) {
String videoURI = file.toURI().toString();
// ...
}
您的主目录中有一个名为
Users
的文件夹?这似乎不太可能。我不知道什么是Player
,在不知道的情况下,不可能真正回答这个问题,但是JavaFX中的大多数方法都希望通过URL(或URL的字符串形式)而不是文件路径传递某种资源。~ shell不是Java吗。您必须使用完整路径或getenv$HOME。或者,您可以使用“user.home”属性。@James\u我已经添加了播放器类代码,并且在桌面上还有一份媒体文件的副本。我需要path来输入字符串path with never work,Java不知道什么是~
。请阅读:“媒体类表示媒体资源。它是从源URI的字符串形式实例化的。”因此,您不应该在这里传入文件路径。看起来mp4是您实际项目的一部分(而不是用户文件系统上的内容),因此一旦部署了应用程序,它就不再是一个文件,而是捆绑在包含应用程序的jar文件中。包含您发布的代码的类是否与mp4在同一个包中?