Дякую, вдається відтворювати аудіо файли в циклі .
Тепер проблема в тому щоб одночасно в мітці зявлялась назва файла який відтворюється. Зявлялась лише назва останнього файла після того як всі файли програються. Мені порадили скористатися багатопоточністю. Я тільки почав її вивчати . Вдалось зробити так щоб мітці зявлялалась назва файла який відтворюється лише коли файли відтворювати не в циклі , а при натисканні на кнопку. Тобто щоб відтворити один файл щоразу треба натискати на кнопку. ось код (повторюсь що багатопоточність я лише почав вивчати , буду вдячний за поради) :
створив два класи які реалізують Runnable() . один програє файл , а інший в мітку записує назву цього файла. Потім ці потоки добавляються в Лісенер для кнопки :
public class recS implements Runnable{
Thread t;
File soundFile;
public recS (File soundFile){
this.soundFile = soundFile;
t = new Thread(this, "recS");
System.out.println(" public recS ()");
t.start();
}
@Override
public void run() {
try {
playSound(soundFile);
Thread.sleep(5000);
} catch (InterruptedException ex) {
Logger.getLogger(recS.class.getName()).log(Level.SEVERE, null, ex);
System.err.println("переривання recS");
}
}
private void playSound( File soundFile) {
try{
Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(soundFile));
clip.start();
Thread.sleep(clip.getMicrosecondLength()/1000);
Thread.sleep(1000);
}catch(Exception ex){
System.out.println("Exception");
}
}
}
public class jLab implements Runnable{
Thread jlT ;
JLabel label;
File soundFile;
public jLab(JLabel label, File soundFile){
this.soundFile = soundFile;
this.label = label;
jlT = new Thread(this, "jLab");
System.out.println("public jLab()");
jlT.start();
}
@Override
public void run() {
label.setText("text--"+soundFile.getName());
}
}
class buttonAL2Listener implements ActionListener {
JLabel label;
SoundClip sCobj = new SoundClip();
public buttonAL2Listener(JLabel label) {
this.label = label;
}
@Override
public void actionPerformed(ActionEvent ae) {
File soundFile = new File("C:\\Documents and Settings\\Мои документы\soundClip\\Clip");
File[] files = soundFile.listFiles();
new recS( files[sCobj.getCountFile()]); // Програються файли
new jLab(label, files[sCobj.getCountFile()] ); // В мітку записується назва файла
sCobj.setIterCountFile(); // Збільшує лічильник файлів на 1 .
if(sCobj.getCountFile() == 3){
sCobj.setCountFile(0);
}
}
}
Мені треба щоб в циклі відтворювались файли та в мітці зявлалась назва файла . Це невдається . Відразу всі файли відтворюються ну а в мітці назва останнього файла. Спробував в Лісенер додати такий код (не знаю чи він тут доречний взагалі) :
після цього файли відтворюються послідовно . але в мітці зявляється назва лише останнього файла після того як всі файли відтворяться.