Salve,
ho provato ad eseguire questo codice, ma mi da errore nel metodo creaWav in corrispondenza di return(clip): "variabile clip potrebbe non essere inizializzata". Allora ho provato ad inizializzarla così: Clip clip=new Clip(); e mi da errore: "la classe Clip è una classe astratta e non può essere inizializzata".
Per far funzionare il tutto ho dovuto usare un oggetto Clip dichiarato come campo d'istanza allora funziona con il metodo creaWav che ritorna void ed usa il campo clip dichiarato al di fuori.
Se uno deve far suonare il wav pigiando più bottoni più volte sarebbe stato utile avere un metodo da richiamare una sola volta ed usare più volte il clip di ritorno.
Dove è l'intoppo?
Grazie
codice:
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import java.net.*;
import java.awt.Color;
import javax.swing.*;
public class NewClass extends JFrame {
AudioInputStream audioIn;
Clip clip,clip1,clip2;
JButton jb1,jb2;
public NewClass() {
setTitle("NewClass");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setBackground(Color.white);
setLayout(null);
setSize(285, 100);
setLocationRelativeTo(null);
setVisible(true);
jb1 = new JButton();
jb1.setText("On");
jb1.setBounds(10,10, 100, 40);
jb1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
clip1=creaWav("/sound/Click On.wav");
clip1.start();
}
});
add(jb1);
jb2 = new JButton();
jb2.setText("Off");
jb2.setBounds(112,10, 100, 40);
jb2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
clip2=creaWav("/sound/Button Click Off.wav");
clip2.start();
}
});
add(jb2);
}
private Clip creaWav(String pat){
Clip clip;
try{
URL souURL = getClass().getResource(pat);
AudioInputStream audioIn = AudioSystem.getAudioInputStream(souURL);
clip = AudioSystem.getClip();
clip.open(audioIn);
} catch(Exception ex) {
System.err.println(ex.getMessage());
}
return(clip);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewClass();
}
});
}
}