[英]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
方法中? 使用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
方法之外加载图像。 否则,每次重新绘制面板时,都会重新加载图像。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.