【发布时间】:2017-05-21 17:00:49
【问题描述】:
所以我的任务是创建一个显示媒体文件列表的小程序,并使用默认的 OS 媒体播放器分别运行这些媒体文件。
我目前的解决方案是创建一个包含所有媒体文件的包,例如:
-com.media
|_a.mp4
|_b.mp4
以下代码将选定的 mp4 复制到临时目录,然后运行默认的 os 媒体播放器:
public File copyTempMedia(File tempAppFolder, String videoName) {
URL f = getClass().getResource(String.format("%s/%s", Constants.MEDIA_LOCATION, videoName));
File from = new File(f.getPath());
File to = new File(tempAppFolder.getAbsolutePath());
try {
FileUtils.copyFileToDirectory(from, to);
} catch (IOException ex) {
Logger.getLogger(MediGUIModel.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("Temp video copied: " + to.getAbsolutePath() + "/" + to.getName());
return to;
}
public void triggerMediaPlayer(String fileLocation) {
System.out.println("Triggering media player: " + fileLocation);
try {
if (OPERATIN_SYSTEM.contains("Linux")) {
Runtime.getRuntime().exec("sh -c " + fileLocation);
} else if (OPERATIN_SYSTEM.contains("Windows")) {
Runtime.getRuntime().exec("cmd /c " + fileLocation);
}
} catch (IOException ex) {
Logger.getLogger(MediGUIModel.class.getName()).log(Level.SEVERE, null, ex);
ex.printStackTrace();
}
}
当我通过 Netbeans 运行程序时,它按预期工作,但是当我执行 clean/build 运行从构建创建的 .jar 时,似乎没有读取媒体文件,所以我的问题是:
- 为什么它通过 Netbeans 而不是通过 build .jar 工作?
- 这是解决此问题的最佳方法吗?
- 我应该以不同的方式包装媒体吗?
提前致谢。
编辑
所以在通过控制台运行而不是双击 jar 之后,在我读取文件的行中得到一个空指针异常:
URL f = getClass().getResource(String.format("%s/%s", Constants.MEDIA_LOCATION, videoName));
为什么它在 Netebeans 中有效,但在 build/jar 中无效?
在 jar 中是否还有其他地方可以放置媒体文件,以便通过 getResource 或 getResourceAsStream 毫无问题地读取它们?
【问题讨论】: