Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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-使用资源(图像和音频文件)在eclipse中导出到JAR文件_Java_Eclipse_Image_Audio_Jar - Fatal编程技术网

Java-使用资源(图像和音频文件)在eclipse中导出到JAR文件

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

我在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;

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中的滞后音频一无所知,我从未使用过,所以我无法帮助您。我认为你应该从你的角度进行一些调查,并为这个问题创建一个新的线索。