Finalmente ho quasi finito il programma, ora l'unica cosa che devo mettere a punto è questa!
Finchè eseguo il programma su eclipse tutto ok, ma nel momento in cui lo esporto in un file .jar non viene più riprodotta la musica.
Ecco la classe Suono:
public class Suono implements Runnable{
File sf;
AudioFileFormat aff;
AudioInputStream ais;
AudioFormat af;
DataLine.Info info;
Clip ol;
Livello liv;
String titolo;
Suono(Livello l){
liv=l;
sf=sceltaFile(l.getNumLivello());
try{
aff=AudioSystem.getAudioFileFormat(sf);
ais=AudioSystem.getAudioInputStream(sf);
af=aff.getFormat();
info = new DataLine.Info(Clip.class, ais.getFormat(), ((int) ais.getFrameLength() * af.getFrameSize()));
ol = (Clip) AudioSystem.getLine(info);
}
catch(UnsupportedAudioFileException ee){}
catch(IOException ea){}
catch(LineUnavailableException LUE){};
}
void stop(){
try{
ol.stop();
}
catch(Exception e){}
}
private File sceltaFile(int n){
URL url=null;
File x=null;
switch(n){
case(1):
url = ClassLoader.getSystemResource("musiche/Pretty handsome awkward.wav");
break;
case(2):
url = ClassLoader.getSystemResource("musiche/2 minutes to midnight.wav");
break;
case(3):
url = ClassLoader.getSystemResource("musiche/Rocket queen.wav");
break;
case(4):
url = ClassLoader.getSystemResource("musiche/Metalingus.wav");
break;
case(5):
url = ClassLoader.getSystemResource("musiche/The fight song.wav");
break;
case(6):
url = ClassLoader.getSystemResource("musiche/Banned from heaven.wav");
break;
case(7):
url = ClassLoader.getSystemResource("musiche/Enter sandman.wav");
break;
case(8):
url = ClassLoader.getSystemResource("musiche/Lost to apathy.wav");
break;
case(9):
url = ClassLoader.getSystemResource("musiche/Falling away from me.wav");
break;
case(10):
url = ClassLoader.getSystemResource("musiche/Not falling.wav");
break;
}
try {
x = new File(url.toURI());
} catch(URISyntaxException e) {
//x = new File(url.getPath());
}
return x;
}
public void run(){
Finestra.setCanzone(sf.getName());
try{
ol.open(ais);
ol.start();
}
catch(IOException ea){}
catch(LineUnavailableException LUE){};
}
}
Credo che il pezzo determinante di codice sia questo:
try {
x = new File(url.toURI());
} catch(URISyntaxException e) {
//x = new File(url.getPath());
}
ma non so come sostituirlo perchè funzioni.
Come vedete ho tentato col metodo ClassLoader.getSystemResource(), ma dato che non esiste un costruttore di File con parametro un URL non so davvero dove mettere le mani.