Java 从Main.class.getResource()获取文件
我正在用Java做一个小游戏。对于这个游戏,我只是添加了声音。所以我想把我所有的图像和音频文件都放在罐子里。对于图片,这很简单:Java 从Main.class.getResource()获取文件,java,file,jar,javasound,getresource,Java,File,Jar,Javasound,Getresource,我正在用Java做一个小游戏。对于这个游戏,我只是添加了声音。所以我想把我所有的图像和音频文件都放在罐子里。对于图片,这很简单: new ImageIcon(Main.class.getResource("images/machgd2.png")).getImage() 但对于音频,它只在Eclipse中运行程序时才起作用,而不是从jar运行。我使用: File soundFile = new File(Main.class.getResource(filename).getFile());
new ImageIcon(Main.class.getResource("images/machgd2.png")).getImage()
但对于音频,它只在Eclipse中运行程序时才起作用,而不是从jar运行。我使用:
File soundFile = new File(Main.class.getResource(filename).getFile());
那么如何从.jar文件中获取这个文件呢
更新:
好的,谢谢安德鲁,它成功了!
为了播放声音,我使用了我在网上找到的一个类,我发现这个类只使用文件来获取音频输入流,所以我放弃了文件的东西。当它在jar文件中时,它不是文件系统中的文件,是吗?您必须将文件从jar文件复制到某个临时位置,或者使用不需要文件的API(例如,只需要
InputStream
或URL
,这两种API都可以通过getResourceAsStream
或getResource
从jar文件轻松获得)
您还没有显示您在哪里使用
声音文件
-如果您向我们显示您尝试使用的API,我们可以尝试建议适当的替代方案。当它位于jar文件中时,它不是文件系统中的文件,是吗?您必须将文件从jar文件复制到某个临时位置,或者使用不需要文件的API(例如,只需要InputStream
或URL
,这两种API都可以通过getResourceAsStream
或getResource
从jar文件轻松获得)
您还没有显示您在哪里使用声音文件
-如果您向我们显示您尝试使用的API,我们可以尝试建议一个合适的替代方案。请参见“播放剪辑
”
import java.net.URL;
import javax.swing.*;
import javax.sound.sampled.*;
public class LoopSound {
public static void main(String[] args) throws Exception {
URL url = new URL(
"http://pscode.org/media/leftright.wav");
Clip clip = AudioSystem.getClip();
// getAudioInputStream() also accepts a File or InputStream
AudioInputStream ais = AudioSystem.
getAudioInputStream( url );
clip.open(ais);
// loop continuously
clip.loop(-1);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// A GUI element to prevent the Clip's daemon Thread
// from terminating at the end of the main()
JOptionPane.showMessageDialog(null, "Close to exit!");
}
});
}
}
您可能注意到,它使用的是URL
(由getResource()
返回)而不是文件。该方法被重载以同时接受文件
或输入流
,但我最常用的是基于URL
的版本。请参见“从此处播放剪辑
”
import java.net.URL;
import javax.swing.*;
import javax.sound.sampled.*;
public class LoopSound {
public static void main(String[] args) throws Exception {
URL url = new URL(
"http://pscode.org/media/leftright.wav");
Clip clip = AudioSystem.getClip();
// getAudioInputStream() also accepts a File or InputStream
AudioInputStream ais = AudioSystem.
getAudioInputStream( url );
clip.open(ais);
// loop continuously
clip.loop(-1);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// A GUI element to prevent the Clip's daemon Thread
// from terminating at the end of the main()
JOptionPane.showMessageDialog(null, "Close to exit!");
}
});
}
}
您可能注意到,它使用的是URL
(由getResource()
返回)而不是文件。该方法被重载以同时接受文件
或输入流
,但我最常用的是基于URL
的版本。只需要输入流或URL的版本,因为getResource()返回URL@JBNizet:是的,这就是为什么它只是一个“例如”-我不想给出太多的选项。将进行编辑,因为URL在这里可能更有用…只需要InputStream或URL,因为getResource()返回URL@JBNizet:是的,这就是为什么它只是一个“例如”-我不想给出太多的选项。不过会编辑,因为URL在这里可能更有用…“好的,开始工作了”,很高兴听到这个消息。“谢谢安德鲁!”很高兴听到这个消息。“好的,开始工作了。”。“谢谢安德鲁!”请随意回答。