Я нашел много тем, предлагающих и обсуждающих клонирование, но я не смог реализовать метод, который может дублировать мой объект Clip.
Вот что я пробовал:
// ... setting up class ...
MyClip GunClip = new MyClip();
GunClip.set(AudioSystem.getClip());
AudioInputStream inputStream = AudioSystem.getAudioInputStream(new BufferedInputStream(getClass().getResourceAsStream("/Resources/sound/Laser.wav")));
GunClip.dummy.open(inputStream);
// ...
Затем, когда событие срабатывает, я хочу воспроизвести этот звук несколько раз.Поэтому я пытаюсь продублировать его:
class MyClip implements Cloneable {
Clip dummy;
public MyClip() {
}
public Clip get() {
return dummy;
}
public void set(Clip c) {
this.dummy = c;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
Я реализую класс Cloneable, как предложено в этой теме.
И затем клонирую его перед тем, как воспроизвести его:
MyClip c = (MyClip) GunClip.clone();
c.dummy.setFramePosition(0);
c.dummy.start();
Но даже сейчас это не работает ...
РЕДАКТИРОВАТЬ: я выяснил, почему это не работает, потому что это не глубокийclone и InputStream, который используется исходным GunClip, не клонируется.Но поскольку Clip является абстрактным интерфейсом, клонировать его может быть сложнее, чем обычно.