我在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) {
}
它只适用于eclipse。当我将它导出到jar文件或runnable 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的可用内存,但是在加载程序和通过点击JButtons更改JFrame中的JPanels时会出现一些滞后。
感谢您的任何建议。
答案 0 :(得分:0)
你在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
方法之外加载图片。否则,每次重新绘制面板时,都会重新加载图像。