Решено: Я решил это!! Мне пришлось увеличить размер кучи свойств моего проекта в среде netbeans, а не в самой конфигурации среды netbeans.
У меня есть очень простое игровое приложение, я использую объект Clip из пакета javax.sound.sampled для воспроизведения фоновой музыки (файл формата mp3 длиной почти 9 м и размером 8 МБ). Я преобразовал его в файл wav и стало 87мб >_‹. И у меня есть небольшие файлы wav, которые я использую для кнопок. Проблема в том, что я получаю OutOfMemoryError каждый раз, когда завершаю свою программу. Я сделал приложение, которое имитирует ту же проблему, только если вы щелкаете короткие клипы несколько раз после того, как сначала щелкнете файл длинной волны, а затем нажмете кнопку «Завершить», чтобы завершить его, а затем я получаю эту ошибку. Однако я не знаю, как предоставить те же файлы wav другим, чтобы они могли попробовать и протестировать этот образец.
import javax.swing.*;
import javax.sound.sampled.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
public class ClipClass extends JPanel implements ActionListener{
private JButton longClip, shortClip1,shortClip2,quit;
public ClipClass(){
setLayout(new GridLayout(2,2,0,0));
longClip = new JButton("Play long wav");
shortClip1 = new JButton("Play short wav1");
shortClip2 = new JButton("Play short wav2");
quit = new JButton("Terminate");
add(longClip);
add(shortClip1);
add(shortClip2);
add(quit);
longClip.addActionListener(this);
shortClip1.addActionListener(this);
shortClip2.addActionListener(this);
quit.addActionListener(this);
}
public synchronized void playSound(final String url) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File(url));
clip.open(inputStream);
clip.start();
clip.addLineListener(new LineListener() {
@Override
public void update(LineEvent evt) {
if (evt.getType() == LineEvent.Type.STOP) {
evt.getLine().close();
}
}
});
} catch (Exception e) {
}
}
});
}
public static void main(String[] args){
JFrame frame = new JFrame("SampleSoundOOME");
ClipClass pane = new ClipClass();
frame.setContentPane(pane);
frame.setVisible(true);
frame.pack();
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==longClip){
playSound("C:/Users/Sony/Documents/NetBeansProjects/Sphere Break/Trance.wav");
}if(e.getSource()==shortClip1){
playSound("C:/Users/Sony/Documents/NetBeansProjects/Sphere Break/KDE_Window_Sticky.wav");
}if(e.getSource()==shortClip2){
playSound("C:/Users/Sony/Documents/NetBeansProjects/Sphere Break/KDE_Window_Iconify.wav");
}if(e.getSource()==quit){
System.exit(0);
}
}
}