Buon giorno a tutti quanti, oggi ho un nuovo quesito da porre.
Ho un programma principale, che al verificarsi di un evento deve riprodurre una serie di suoni, appoggiandosi ad una seconda classe che vi posto sotto. fin qui nessun problema, tutto gestito correttamente. dopo un tempo x variabile però mi dà il seguente errore:
Codice PHP:
      Exception in thread "Timer-1" java.lang.OutOfMemoryErrorJava heap space
           at AePlayWave
.run(AePlayWave.java:45)
           
at AePlayWave.initAudio(AePlayWave.java:11)
           
at MyTimerTask.run(EasyMonitor.java:5109)
           
at java.util.TimerThread.mainLoop(Timer.java:512)
           
at java.util.TimerThread.run(Timer.java:462
la classe che utilizzo è la seguente:

Codice PHP:
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.*;

public class 
AePlayWave extends Thread {
    private 
String filename;
    private 
int EXTERNAL_BUFFER_SIZE 524288// 128Kb

    
public void initAudio(String wavfile) {
        
filename wavfile;        
                
run();
    }
    
    public 
void run() {        
        
File soundFile = new File(filename);
        if (!
soundFile.exists()) {
            
//System.err.println("Wave file not found: " + filename);
            
return;
        }
        
AudioInputStream audioInputStream null;
        try {
            
audioInputStream AudioSystem.getAudioInputStream(soundFile);
        } catch (
UnsupportedAudioFileException e1) {
            
e1.printStackTrace();
            return;
        } catch (
IOException e1) {
            
e1.printStackTrace();
            return;
        }
        
AudioFormat format audioInputStream.getFormat();
        
SourceDataLine auline null;
        
DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
        try {
            
auline = (SourceDataLineAudioSystem.getLine(info);
            
auline.open(format);
        } catch (
LineUnavailableException e) {
            
e.printStackTrace();
            return;
        } catch (
Exception e) {
            
e.printStackTrace();
            return;
        }
        
auline.start();
        
int nBytesRead 0;

                
//riga che genera errore
                
byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];

        try {
            while (
nBytesRead != -1) {
                
nBytesRead audioInputStream.read(abData0abData.length);
                if (
nBytesRead >= 0)
                    
auline.write(abData0nBytesRead);
            }
        } catch (
IOException e) {
            
e.printStackTrace();
            return;
        } finally {
                        
//System.out.println();
            
auline.drain();
            
auline.close();
        }
    }

Mi sapreste spiegare perchè, ed eventualmente suggerire una soluzione migliore e performante, considerando che il programma potrebbe dover essere attivo parecchie ore consecutive?