| 

.NET C# Java Javascript Exception

1
Also ich habe einen Listener, so das benachrichtigt wird, wenn sich ein Fenster öffnet.
Wenn sich das Fenster öffnet, soll eine Sound Datei abgespielt werden, das passiert auch, jedoch möchte ich das der ton nur einmal abgesoielt wird, da ich nicht weiß wieviele listener existieren.

Ein wenig Code
@Override
public void invokeListener(IActionPlanQtyChangeListener listener) {
listener.onActionPlanAdded(evt);
IActionPlan actionPlan = evt.getActionPlan();
String audioFile = actionPlan.getAudioFile();
if (!audioFile.isEmpty())
playSound(audioFile);
}



/**
* Spielt eine Sounddatei ab, die zu einem Maßnahmeplan konfiguriert wurde.
*
* @param audioFile
* , die Sounddatei die abgespielt werden soll, niemals <code>null</code>.
*/
private void playSound(@Nonnull String audioFile) {
AudioInputStream stream = getAudioStream(audioFile);
if (stream == null) {
return;
}
AudioFormat format = stream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
Clip clip = null;
try {
clip = (Clip) AudioSystem.getLine(info);
clip.open(stream);
}
catch (Exception e) {
String msg = "Die Sounddatei " + audioFile + " kann nicht abgespielt werden. Es ist ein Fehler beim öffnen der Sounddatei aufgetreten.";
Activator.logError(msg, e);
logger.log(LOG_ERROR, msg, e);
}
if (!clip.isRunning())
clip.start();

}

/**
* Liefert den {@link AudioInputStream} der übergebenen Sounddatei.
*
* @param audioFile
* die Sounddatei, die geladen werden soll
* @returnder {@link AudioInputStream} der übergebenen Sounddatei oder <code>null</code>, wenn
* ein Fehler beim laden auftritt
*/
@Nullable
private AudioInputStream getAudioStream(@Nonnull String audioFile) {
AudioInputStream stream = null;
IFile file = null;
try {
IProject rfolder = getProject(IConfigConstants.SOUND_PROJECT);
IResource[] members = rfolder.members();
for (IResource resource : members) {
String name = resource.getName();
int type = resource.getType();
if (type == IResource.FILE && name.equals(audioFile)) {
file = getFile(resource.getFullPath());
}
}
InputStream contents = file.getContents();
stream = AudioSystem.getAudioInputStream(contents);
}
catch (UnsupportedAudioFileException | CoreException | IOException e) {
String msg = "Die Sounddatei " + audioFile + " kann nicht abgespielt werden. Es ist ein Fehler beim laden der Sounddatei aufgetreten.";
Activator.logError(msg, e);
logger.log(LOG_ERROR, msg, e);
}

return stream;
}



Wie kann ich das realisieren?einfach nru mit...
if(!clip.isRunning()) clip.start();
???


Und muss ich den CLip immer wieder stopen und schließen?
17.04.2015
tanzverfuehrung 147 8