Java-使用资源(图像和音频文件)在eclipse中导出到JAR文件
我在linux Ubuntu上使用eclipse,我有以下代码用于加载图像并将其设置为我的一个JPanel中的背景:Java-使用资源(图像和音频文件)在eclipse中导出到JAR文件,java,eclipse,image,audio,jar,Java,Eclipse,Image,Audio,Jar,我在linux Ubuntu上使用eclipse,我有以下代码用于加载图像并将其设置为我的一个JPanel中的背景: public class MenuState extends JPanel implements ActionListener { private static final long serialVersionUID = 1L; private GameStateManager gsm; private int width; private int height; publi
public class MenuState extends JPanel implements ActionListener {
private static final long serialVersionUID = 1L;
private GameStateManager gsm;
private int width;
private int height;
public MenuState(GameStateManager gsm)
{
this.gsm = gsm;
width = gsm.getWidth();
height = gsm.getHeight();
SizeManager sm = new SizeManager();
this.setLayout(new BorderLayout());
sm.set_size(this, width, height);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
BufferedImage background_image;
try {
background_image = ImageIO.read(new File("src/res/img/menu_background.png"));
g.drawImage(background_image, 0, 0, width, height, null);
} catch (IOException e) {
e.printStackTrace();
}
}
public void actionPerformed(ActionEvent e) {
}
它只在eclipse中工作。当我将其导出到jar文件或可运行jar文件时,程序不会显示图像。我也试着用
this.getClass().getResource()
和类似的代码,但在eclipse中不起作用。但我可能做错了什么
我在另一个类中也有此代码来播放音频:
public class AudioManager {
private Clip clip;
public void play(String audio_name, boolean repeat)
{
try {
File audioFile = new File(audio_name);
AudioInputStream audioStream = AudioSystem.getAudioInputStream(audioFile);
AudioFormat format = audioStream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
clip = (Clip) AudioSystem.getLine(info);
clip.open(audioStream);
if(repeat)
{
clip.loop(clip.LOOP_CONTINUOUSLY);
}
clip.start();
} catch (Exception e) {
e.printStackTrace();
}
}
public void stop()
{
clip.stop();
}
它在eclipse中播放音频,但在我导出项目后不播放
我想该文件只适用于磁盘上的文件,而不适用于jar文件中的文件,但这是我使其在eclipse中工作的唯一方法
那么,我该怎么办
和其他问题:
eclipse中播放的声音比较滞后,我对其进行了改进,增加了eclipse的可用内存,但在加载程序和通过单击JButtons更改JFrame中的JPanel时,很少出现滞后
谢谢你的建议。你在
getResource
方法中放了什么字符串?
使用getResource
或getResourceAsStream
时,必须指定包路径。如果您的文件位于包“com.test.example”中,则必须将getResource(“/com/test/example/my_file.png”)
因此,对于背景图像,您必须使用以下内容加载图像:
background_image = ImageIO.read(this.getClass().getResource("/res/img/menu_background.png"));
你应该用同样的方法处理你的音频文件
我还建议您在
paintComponent
方法之外加载图像。否则,每次重新绘制面板时,图像都会重新加载。谢谢,我想我可以使用文件中使用的相同路径,但对于getResource(),我必须删除/src。对于eclipse中的滞后音频有什么建议吗?不客气。我对eclipse中的滞后音频一无所知,我从未使用过,所以我无法帮助您。我认为你应该从你的角度进行一些调查,并为这个问题创建一个新的线索。