声音将在 Eclipse 中播放,但不会在导出的 jar 文件中播放
Posted
技术标签:
【中文标题】声音将在 Eclipse 中播放,但不会在导出的 jar 文件中播放【英文标题】:sound will play in eclipse but not in exported jar file 【发布时间】:2013-08-01 03:30:55 【问题描述】:运行 JAR 时不播放声音,但在 eclipse 中运行时播放。
这是我加载剪辑的地方:(文件是从 jar 的目录加载的,而不是从 jar 中加载的)
public void init()
System.out.println("grabbing Music");
String currentDir = new File("").getAbsolutePath();
name=new File(currentDir+"\\music\\").list();
clip=new Clip[name.length];
soundFile=new File[name.length];
for(int x=0;x<name.length;x++)
System.out.println(currentDir+"\\music\\"+name[x]);
try
soundFile[x]= new File(currentDir+"\\music\\"+name[x]);
AudioInputStream sound = Audiosystem.getAudioInputStream(soundFile[x]);
DataLine.Info info= new DataLine.Info(Clip.class, sound.getFormat());
clip[x] = (Clip) AudioSystem.getLine(info);
clip[x].open(sound);
clip[x].addLineListener(new LineListener()
public void update(LineEvent event)
if (event.getType() == LineEvent.Type.STOP)
event.getLine().close();
);
catch (LineUnavailableException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
catch (UnsupportedAudioFileException e)
e.printStackTrace();
我在 Eclipse 中运行它时没有收到任何错误。应该不存在无效目录错误的可能性,那到底是怎么回事?
-当 jar 在 CMD 中运行时,我没有收到任何错误或堆栈跟踪,因此它正在加载文件,它只是在调用 clip.start() 时没有运行它。所以我加载文件的方式与可运行的 jar 不兼容。
编辑:我觉得我加载音频错误,因此我粘贴了我用来加载文件的代码。在我的搜索中,我没有看到有人使用 File 加载声音文件。不知道是不是这个问题?
-切换到嵌入式资源也不起作用。
【问题讨论】:
显而易见的问题:jar 是否包含声音文件? 根据 Jar 文件的当前执行上下文,文件似乎正在从文件系统加载。两条路径可能不一样。考虑改用嵌入式资源 【参考方案1】:您的声音没有播放的原因很可能是它没有被编译到您的可运行 jar 中,因此无法找到。将其编译成可运行 jar 的最佳方法是在 eclipse 中创建一个源文件夹,然后在其中添加您的声音文件。然后它将被编译到你的 jar 中
【讨论】:
它肯定可以找到文件,因为没有抛出fileNotFound异常。 尝试用 WINRAR 打开你的可运行 jar,看看它是否在里面 文件是从 jar 外部加载的。不在里面。【参考方案2】:我也为此苦苦挣扎。你需要使用
getClass().getSystemResource("pathToResourceFromClass")
例如,如果您的项目结构如下:
-项目名称
-----src
---------SomeClass.java
-----图片
---------SomeImage.png
然后从 SomeClass.java,你会使用
getClass().getSystemResource("images/SomeImage.png")
获取引用该文件的URL
对象。然后,您可以根据需要将该 URL
对象传递给 ImageIcon
的构造函数。
请注意,getClass().getResource()
不适用于 jar 文件中的图像或声音文件!!!我在这方面花了很多时间,getResource()
不起作用。对于 jar 文件中的资源,您必须使用 getSystemResource(..)
。
如果您对此有任何疑问,请告诉我。我很乐意澄清任何令人困惑的地方。
【讨论】:
以上是关于声音将在 Eclipse 中播放,但不会在导出的 jar 文件中播放的主要内容,如果未能解决你的问题,请参考以下文章