Arquivo JAR (runnable) não toca os áudios

Bom dia, gente. Eu estava criando um pequeno jogo com JFrame. Para deixar o jogo mais legal, eu coloquei dois áudios, um de erro e outro de acerto. Eu testei no eclipse essa classe e os áudios rodaram normalmente (esses áudios estavam dentro do projeto). Só que, como eu ia criar um JAR para rodar em outros computadores, esse áudio não funcionou. Alguém pode dizer qual foi o erro?

Embaixo tem o código inteiro, não deu nenhum erro.

package game;

import java.awt.*;
import java.awt.event.*;
import java.io.File;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.swing.*;
import java.util.*;

public class Jogo extends JFrame implements ActionListener {

	JTextField campoTexto1 = new JTextField(20);
	JButton b = new JButton("OK");
	JButton button = new JButton("Ok");
	
   
	public Jogo() {
		JLabel texto = new JLabel("Digite um numero aleatório de 1 a 20");
		
		setTitle("Adivinhar números aleatórios");
		setLayout(new FlowLayout());
		setBounds(0, 0, 1000, 500);
		setLocationRelativeTo(null);
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		add(campoTexto1);
		
		add(texto);
		
		button.addActionListener(this);
		button.setBounds(0, 0, 100, 100);
		button.setForeground(Color.GRAY);
		button.setBackground(Color.ORANGE);
		button.setToolTipText("Digite um número aleatório inteiro entre 1 e 20");
		add(button);
		
}
	
	public void musicaErro(File musica) {
		try {
			Clip clip = AudioSystem.getClip();
			clip.open(AudioSystem.getAudioInputStream(musica));
			clip.start();
			Thread.sleep(clip.getMicrosecondLength() / 1000);
		} catch (Exception e) {
			
		}
		
	}
	
	public void musicaSucesso(File musica2) {
		try {
			Clip clip = AudioSystem.getClip();
			clip.open(AudioSystem.getAudioInputStream(musica2));
			clip.start();
			Thread.sleep(clip.getMicrosecondLength() / 1000);
		} catch (Exception e) {
			
		}
		
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		try {
		if (e.getSource() == button) {
			Random num = new Random();
			int aleatorio = (int) num.nextInt(20 - 1) + 1;
			int textoNumero = Integer.parseInt(campoTexto1.getText());
			if (aleatorio == textoNumero) {
				File musicaSucesso = new File("109662__grunz__success.wav");
				JOptionPane.showMessageDialog(null, "Você acertou!", "Resultado", JOptionPane.INFORMATION_MESSAGE);
			} else {
				File musicaErro = new File("beep-1.wav");
				musicaErro(musicaErro);
				JOptionPane.showMessageDialog(null, "Você errou, o número aleatório foi " + aleatorio, "Resultado", JOptionPane.ERROR_MESSAGE);
			}
		}
		} catch (NumberFormatException n) {
			JOptionPane.showMessageDialog(null, "Não é um número!");
		}
	}

    public static void main(String[] args) {
    	new Jogo();
    }	
}

Dentro de um jar vc não pode carregar arquivos dessa forma:

File musicaErro = new File("beep-1.wav");

Pois os paths são meio que diferentes no jar. Vc deve recuperar o arquivo como stream:

InputStream in = getClass().getResourceAsStream("/109662__grunz__success.wav"); 

E a partir do inputStream, vc consegue manipular o arquivo da forma que precisar.

Ainda não deu certo, será que tenho que colocar o diretório desses áudios?

Tenta sem a barra:

InputStream in = getClass().getResourceAsStream("109662__grunz__success.wav");

Ainda não funcionou

Dá algum erro?

Esse tipo de catch não é recomendado.

  1. Trate exceções específicas.
  2. Não está tratando a exceção. Pelo menos coloque para printar o stack trace pra saber o que está acontecendo.

Não, funciona tudo mas não toca o áudio

Ah sim, como ficou o código depois que tu mudou para getResourceAsStream?

Vou tentar colocar as exceções

Continua não saindo nada, mesmo com o resourceAsStream :frowning:

Eu acho que deve ser a pasta desses áudios, eu coloquei direto no projeto

Copia os arquivos de áudio para dentro da pasta src e tenta de novo com o resourceAsStream:

InputStream in = getClass().getResourceAsStream("109662__grunz__success.wav");

Uma pergunta, eu preciso colocar esses sons no mesmo pacote da classe? Porque ainda não deu certo