2017-01-31 1 views
0

я использую затмение на Linux Ubuntu и у меня есть этот код для загрузки изображения и установив его в качестве фона в одном из моих JPanel,:Java - Экспорт в JAR файл в затмении ресурсы (изображения и звуковые файлы)

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(); 
} 

и воспроизводит звук в затмении, но не после того, как я экспортировать проект.

Я предполагаю, что файл работает только для файлов на диске, а не для файлов в файле jar, но это единственный способ заставить его работать в eclipse.

Итак, что мне делать?

И дополнительная проблема: Звук, воспроизводимый в затмении, отстает, я улучшил его увеличение доступной памяти для затмения, но при загрузке программы и изменении JPanels в JFrame возникают небольшие задержки, щелкнув JButtons.

Спасибо за любой совет.

ответ

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. В противном случае, каждый раз, когда ваша панель перекрашивается, изображение перезагружается.

+0

Спасибо, я думал, что могу использовать тот же путь, который я использовал в файле, но для getResource() мне пришлось удалить/src. И какой-нибудь совет по запаздыванию звука в затмении? – Spook

+0

Добро пожаловать. Я ничего не знаю о задержке звука в затмении, я никогда не использовал это, поэтому я не могу вам помочь. Я думаю, вам следует немного разобраться с вашей стороны и создать новый поток, посвященный этому вопросу. – Madeorsk

Смежные вопросы