我在Netbeans中创建了一个Java Swing Desktop应用程序可以播放媒体文件我将视频放在我的工作区资源位置和我的java程序中我使用URL调用这些媒体文件:
C:/users/Dell/My Documents/NetBeansProjects/Media/src/resources/MediaFiles/ddd.mpg
当我在我的IDE中运行时,这也很有效,而且我已经为我的计算机制作了它在我的计算机上工作得很好但问题是当我在我的朋友系统上复制这个jar文件时接口即将到来但是当我点击一个按钮时播放媒体文件,它说文件 不存在。
所以,请给我一个如何设置默认路径的解决方案,这样当我在其他系统上运行jar文件时,它应该播放我在程序中传递的媒体文件位置。
如何在程序中设置媒体文件位置的路径?
视频位于jar文件中。
答案 0 :(得分:2)
应避免在应用程序jar中打包这些类型的资源文件。我建议您决定在生产过程中存储文件的位置;可能与应用程序的jar文件位于同一文件夹中,也可能位于用户目录下的某个文件夹中。这完全取决于你。
m4tx评论并链接到:Get the application's path
这是一个很好的起点,一旦以编程方式检索路径,就可以将其传递给加载文件的函数。
<强>更新强>
对于桌面应用程序,如果您要将视频文件存储在与应用程序的jar文件相同的目录中,则可以从m4tx的链接中看到此帖子:https://stackoverflow.com/a/676413/1623834
这解释了如何获取可以存储视频文件的应用程序的工作目录,并附加如下文件名:
String fileUri = getWorkingDirectory() + "filename.ext";
getWorkDirectory将是您在该链接中的信息的实现,而filename.ext可以是您的任何资源的名称。当您决定加载一个视频资源时,您只需将此fileUri变量作为路径传递。
如果您的视频资源是相对较小的剪辑,那么将它们存储为嵌入式资源可能并不是那么糟糕,Andrew的回答中有相关信息。
<强>扩展强>
如果你走这条路线,那么你将资源(视频文件)放在与应用程序的.jar文件夹相同的文件夹中。 (您可以将其更改为您想要的任何位置)您可以实现如下功能:
(改编自https://stackoverflow.com/a/676413/1623834)
public String getWorkingDirectory() {
String applicationDir = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
if (applicationDir.endsWith(".exe"))
{
applicationDir = new File(applicationDir).getParent();
}
else
{
// Add the path to the class files
applicationDir += getClass().getName().replace('.', '/');
// Step one level up as we are only interested in the
// directory containing the class files
applicationDir = new File(applicationDir).getParent();
}
return applicationDir;
}
然后,如果您的资源位于应用程序文件夹中的某个位置,则可以执行以下操作:
String fileUri = getWorkingDirectory() + "video1.vid";
或使用子目录:
String fileUri = getWorkingDirectory() + "resources\\filename.ext";
当然,您不必使用应用程序的目录,您可以将文件存储在C:\ Users \之类的文件中,例如从系统的属性中获取用户的目录。
然后取出该文件并将其用作文件的位置。
答案 1 :(得分:2)
如果视频位于jar文件中,则它们实际上是embedded-resource
请注意,上面的URL中的字符串更像是File
个实例的路径,而不是基于文件的URL或URI。
有关使用getResource(String)
获取嵌入资源的网址的详细信息,请参阅embedded resource info. page。
将视频或声音样本等资源放入单独的Jar类中是最佳选择,因为这样可以更轻松地为媒体资源指定“无压缩”。 Zip样式压缩通常对媒体类型没有任何作用,除了使“压缩”资源的字节更大。
如果需要提取资源并将其放在已知位置(例如使用Desktop.open(File)
播放的视频),请参阅this answer以获取提取它们的策略。 “已知位置”是user.home
的子目录。