Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MediaException:从导出的JAR文件运行项目时,媒体\u不可用_Java_Javafx_Executable Jar - Fatal编程技术网

Java MediaException:从导出的JAR文件运行项目时,媒体\u不可用

Java MediaException:从导出的JAR文件运行项目时,媒体\u不可用,java,javafx,executable-jar,Java,Javafx,Executable Jar,这不是重复的,因为无法使用getResourceAsStream()初始化媒体对象。在文档中:“只支持HTTP、文件和JAR URI。” 当我从Eclipse运行JavaFX项目时,它可以完美地工作,但当我运行导出的可执行JAR时,它就会中断。我尝试过每种类型的库处理,但都不起作用。我正在使用JavaFX2.2和Eclipse Oxygen 2018年3月 public static Media gameMusic; public static MediaPlayer gameMusicPlay

这不是重复的,因为无法使用getResourceAsStream()初始化媒体对象。在文档中:“只支持HTTP、文件和JAR URI。”

当我从Eclipse运行JavaFX项目时,它可以完美地工作,但当我运行导出的可执行JAR时,它就会中断。我尝试过每种类型的库处理,但都不起作用。我正在使用JavaFX2.2和Eclipse Oxygen 2018年3月

public static Media gameMusic;
public static MediaPlayer gameMusicPlayer;
public static MediaView gameMusicMediaView;

// adds music, once for each audio file to be played
gameMusic = new Media(new File("resources/data/music/Kevin_MacLeod_-_Ouroboros_-_Full_Mix.wav").toURI().toString());
bulletSound = new AudioClip(new File("resources/data/music/Photon gun shot.wav").toURI().toString());
explosionSound = new AudioClip(new File("resources/data/music/Explosion+3.wav").toURI().toString());
目录结构:

+src
  -source files
+resources
  +data
    +music
      -music files
    +fxml
      -fxml files
    +other folders
错误输出:

MediaException: MEDIA_UNAVAILABLE : /Users/username/Desktop/resources/data/music/Kevin_MacLeod_-_Ouroboros_-_Full_Mix.wav (No such file or directory)
at javafx.scene.media.Media.<init>(Media.java:407)
at application.Main.start(Main.java:77)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)

MediaException:MEDIA\u不可用:/Users/username/Desktop/resources/data/music/Kevin\u MacLeod\u--\ u Ouroboros\u--\ u Full\u Mix.wav(无此类文件或目录)
在javafx.scene.media.media.(media.java:407)
at application.Main.start(Main.java:77)
在com.sun.javafx.application.launchempl.lambda$launchApplication1$162(launchempl.java:863)
位于com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
位于com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
位于java.security.AccessController.doPrivileged(本机方法)
位于com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
位于com.sun.glass.ui.invokelateDispatcher$Future.run(invokelateDispatcher.java:95)

注意:当我修复文件路径的代码以包含可执行文件的名称时,Eclipse和可执行文件都会出现中断

错误很简单,它说
MEDIA\u UNAVAILABLE
意味着您的项目无法从给定路径找到资源。这可能是由于相对路径的原因,您需要提供一个绝对路径来从系统中查找资源

你可以试试这样的

Media media = new Media(getHostServices().getDocumentBase() + "/com/projectName/resources/hello.mp3");
MediaPlayer player = new MediaPlayer(media);
编辑

从hostServices.getCodeBase()中:

如果应用程序未打包在jar文件中,此方法将返回空字符串

并确保您有适当的
导入
,并使用
应用程序
类扩展您的应用程序

import javafx.application.Application;
import javafx.application.HostServices;

public class App extends Application {

}

您需要知道存储资源的文件夹的绝对根目录,否则无法找到它们。Gradle提供了一个
应用程序
插件,该插件将创建一个Windows、Linux和Mac脚本,该脚本将当前目录作为其第一个参数传递。您还可以检查是否没有其他文件夹。所有这些都被导出到一个罐子中file@AndrewS刚看到你的便条,你试过
reference
方法吗?您的资源是否放在同一个包目录中?当您部署JAR文件时,如何部署WAV文件?它们是否打包在JAR文件中?或者它们是与JAR文件一起复制的?如果您将WAV文件打包到JAR文件中,那么您需要执行以下操作:我按照您的建议执行了,但它引发了另一个错误:
MediaException:MEDIA\u不可用:/Users/andrewsneed/Desktop/com/Escape/resources/data/music/Kevin_MacLeod_--u Ouroboros_--u Full_Mix.wav(没有这样的文件或目录)在javafx.scene.media.media.(media.java:407)在application.Main.start(Main.java:77)在com.sun.javafx.application.launchempl.lambda$launchApplication1$162(launchempl.java:863)在com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
@AndrewS检查更新的答案。更新的答案没有帮助,导入的库从未使用过。还有其他想法吗?