Как освободить MediaPlayer от ресурсов?

186
01 декабря 2017, 05:17

Открываю новый файл по клику на кнопке:

File selectedFile = fileChooser.showOpenDialog(null);
            if (selectedFile != null) {
                audname[0] = selectedFile.getName();
                primaryStage.setTitle(audname[0]); //Задаём заголовку окна титл в виде имени файла
                audpath[0] = selectedFile.getAbsolutePath(); // Задаём переменной полный путь к файлу
                //Выполняем метод, т.е. перемещаем открытый файл в папку Work
                FiletoWork();
                //И, собственно, инициализируем его уже из папки Work
                Media sound = new Media(new File(audpath[0]).toURI().toString());
                mediaPlayer = new MediaPlayer(sound);

Файл помещается сразу после выбора в папку Work:

public void FiletoWork() {
        Path temp = null;
        try {
            temp = Files.move(Paths.get(audpath[0]), Paths.get(workfolder + audname[0]));
            audpath[0] = workfolder + audname[0];
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (temp != null) {
            System.out.println("Файл помещен в рабочую");
        } else {
            System.out.println("Не удалось поместить файл в рабочую");
        }
    }

Затем по кнопке "В архив", переносится в папку "архив":

public void FiletoArchive() {
        mediaPlayer.dispose();
        Path temp = null;
        try {
            temp = Files.move(Paths.get(audpath[0]), Paths.get(archfolder + audname[0]));
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (temp != null) {
            System.out.println("Файл помещен в архив");
        } else {
            System.out.println("Не удалось поместить файл в архив");
        }
    }

Беда в том, что первый раз программа делает всё как надо. Но если я снова открываю файл, он помещается в папку Work, а уже при клике на кнопку "В архив", получаю ошибку:

java.nio.file.FileSystemException: Z:\Sound2\WORK\1.mp3 -> Z:\Sound2\ARCHIV\1.mp3: Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.

Всё работает отлично, если объявить переменную sound в методе start (т.е. указать левый аудио файл). Подскажите пожалуйста, где я ошибся?

READ ALSO
Android. Проверка версии приложения в Play Market

Android. Проверка версии приложения в Play Market

Доброго времени сутокСразу же извиняюсь за возможную кривизну вопроса

166
запуск jboss 5.1 через прокси-сервер

запуск jboss 5.1 через прокси-сервер

Добрый день! Отсутствует соединение к Интернету при попытке перехода приложения на любой интернет-сайтВход в интернет должен осуществляется...

239
Сериализация/Десериализация объекта в java

Сериализация/Десериализация объекта в java

Сериализирую объект в файл на Android таким образом:

152
Может ли завейтится все приложения если я использую один монитор?

Может ли завейтится все приложения если я использую один монитор?

У меня есть два потока в одном потоке, который запустился сразу имеется такой код

180