public void play(File file) {
		if (stopRequested) {
			stopRequested = false;
			try {
				AudioInputStream stream = AudioSystem.getAudioInputStream(file);
				AudioFormat format = stream.getFormat();
				DataLine.Info info = new DataLine.Info(Clip.class, stream.getFormat(),
						((int) stream.getFrameLength() * format.getFrameSize()));
				clip = (Clip) AudioSystem.getLine(info);
				if (listeners != null) {
					for (LineListener l : listeners)
						clip.addLineListener(l);
				}
				clip.open(stream); // This method does not return until the audio file is completely loaded
			}
			catch (IOException e) {
				e.printStackTrace();
			}
			catch (LineUnavailableException e) {
				e.printStackTrace();
			}
			catch (UnsupportedAudioFileException e) {
				e.printStackTrace();
			}
		}
		if (clip != null)
			clip.start();
	}