繁体   English   中英

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

[英]Java - Export to JAR file in eclipse with resources (images and audio files)

我在Linux Ubuntu上使用eclipse,我有以下代码用于加载图像并将其设置为我的JPanels中的背景:

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) {
}

它只在日食中起作用。 当我将其导出到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中播放音频,但在我导出项目后不会播放。

我想File仅适用于磁盘上的文件,不适用于jar文件中的文件,但这只是我使其在eclipse中起作用的方式。

所以我该怎么做?

另一个问题:在eclipse中播放的声音滞后,我对其进行了改进,以增加Eclipse的可用内存,但是在加载程序并通过单击JButton更改JFrame中的JPanels时,几乎没有滞后。

感谢您的任何建议。

您将什么字符串放入getResource方法中? 使用getResourcegetResourceAsStream ,必须指定包路径。 如果文件位于“ com.test.example”包中,则必须放入getResource("/com/test/example/my_file.png")

因此,对于背景图片,您必须使用加载图片:

background_image = ImageIO.read(this.getClass().getResource("/res/img/menu_background.png"));

您应该对音频文件执行相同的方法。

我还建议您在paintComponent方法之外加载图像。 否则,每次重新绘制面板时,都会重新加载图像。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM