Sequencer, funciona no Eclipse. Exporto para um .jar e fica sem som

Alo, pessoal. Usei um modelo de codigo de um usuario, fiz um sequencer, coloquei os arquivos .mid na pasta do projeto, usei uma combo box pra escolher o arquivo a ser executado aperto o play e funciona tudo muito bem. Aí exportei o arquivo como jar. Então, ele abre, seleciono o arquivo .mid, clico no play e nao acontece nada (não tem som). Porque no Eclipse funciona tudo certinho e no .jar não tem som? Alguem tem uma ideia? O que eu esqueci?

olha esse link

Olá, orochimaru.
O modo como eu ‘pego’ o arquivo é:

public static String uriString; 

arq= cbMus.getSelectedItem().toString();  	

if (evt.getSource() == bPlay) {
    uriString = new File( arq + ".mp3" ).toURI().toString();    		
    pick = new Media(uriString); 
    player = new MediaPlayer(pick);     				
    player.play();
}

Em que local eu usaria os métodos que voce sugeriu?
Essa parte ‘musical’ do java eu conheço pouco …
Obrigado pela ajuda.

O arquivo ta dentro dos seus resources?

Estão na mesma pasta do projeto.

Tenta assim:

URL musica = this.getClass().getResource("/pasta/musica.mp3");

Se não for:

getClass().getResourceAsStream("/pasta/musica.mp3"))

Ainda não consegui. Experimentei a segunda opção, o sistema pede que mude URL para
InputStream, mas ainda não consegui. Tô tentando. Só uma pergunta: os arquivos meus são .mid, não .mp3. Funciona da mesma forma?

ué, mas vc passou que ta pegando .mp3, acredito que sim, eu não sei que biblioteca vc ta usando

https://www.tutorialspoint.com/java/lang/classloader_getresourceasstream.htm

Oh, desculpe! É que os dois aplicativos que fiz (.mid e .mp3) estão com o mesmo problema: toca no Eclipse e não toca quando exporto para um jar. No caso este é realmente de mp3. Deixa eu me situar de novo, com as suas dicas acima. Foi mal!.

Ok! Dá um retorno com a situação

A partir do momento que seus resources estão dentro do JAR, você só consegue obtê-los através do getResourceAsStream(caminhoRelativoAoClasspath).

Ok, orochimaru e staroski. Com as dicas de voces vou tentar resolver esse do mp3. Depois retorno. Por ora obrigado.

1 curtida

Olá pessoal. “apanhei” um pouco mas consegui fazer alguma coisa. Graças ao orochimaru e o staroski consegui entender esse lance do ‘getResource’ pra ‘pegar’ o resource dentro .jar. Aí fiz várias experiencias, e achei exemplo do raghy num link(abaixo) , adaptei para o meu caso. A sequencia de como consegui fazer funcionar é:
criei um combobox, um array de string com as musicas, capturadas pelo getSelectedItem().toString(), armazenadas numa String ‘music’ que envia como parametro para o metodo abaixo:

public void carregarSom(String music) {

	AudioInputStream sound = null;
	
	try {
		
		sound = AudioSystem.getAudioInputStream(getClass().getResource("/musica/" + music + ".wav"));
	
	} catch (UnsupportedAudioFileException e) {
		e.printStackTrace();
		JOptionPane.showMessageDialog(null, "problema no som", "sound", JOptionPane.INFORMATION_MESSAGE);
	} catch (IOException e) {
		e.printStackTrace();
		JOptionPane.showMessageDialog(null, "problema no som", "sound", JOptionPane.INFORMATION_MESSAGE);
	}
	
	DataLine.Info info = new DataLine.Info(Clip.class, sound.getFormat());
	
	try {
		
		clip = (Clip) AudioSystem.getLine(info);
	
	} catch (LineUnavailableException e) {
		e.printStackTrace();
		JOptionPane.showMessageDialog(null, "problema no som", "clip", JOptionPane.INFORMATION_MESSAGE);
	}
	try {
		
		clip.open(sound);
	
	} catch (LineUnavailableException e) {
		JOptionPane.showMessageDialog(null, "problema no som", "clip_open", JOptionPane.INFORMATION_MESSAGE);
		e.printStackTrace();
	} catch (IOException e) {
		JOptionPane.showMessageDialog(null, "problema no som", "clip_open", JOptionPane.INFORMATION_MESSAGE);
		e.printStackTrace();
	}
}

public void tocaSom() {
	clip.start();
}

Consegui exportar para um .jar. Por ora obrigado a todos voces.