Не удается открыть файл с помощью .getResource (fullPath) - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь открыть файл на Mac.Файл находится вне пакета с основным файлом.Я получаю ошибку

Exception in thread "main" java.lang.NullPointerException

JFileChooser chooser = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter(
                "WAV files", "wav");
        chooser.setFileFilter(filter);
        int returnVal = chooser.showOpenDialog(yourJFrame);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
            System.out.println("You chose to open this file: " +
                    chooser.getSelectedFile().getName());
        }

        File file = chooser.getSelectedFile();
        String fullPath = file.getAbsolutePath();

       >> AudioClip clip = Applet.newAudioClip(Main.class.getResource(fullPath));
        clip.play();

Ошибка помечена >>

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

попробуйте сделать это вместо этого:

URL url = file.toURI().toURL()
AudioClip clip = Applet.newAudioClip( url );

Class.getResource немного проблематичен, он предполагает, что по умолчанию пути являются относительными, и в некоторой степени зависит от используемого загрузчика классов.

Также вы уверены, что файл выбран, ваш оператор if охватывает только println, а не остальную часть функциональности, что означает, что если файл не был выбран, может также возникнуть нулевой указатель.Хотя NPE произойдет в строке выше.

Также в качестве примечания я бы не использовал AWT, поскольку он был заменен свингом, который сам был заменен javafx.

0 голосов
/ 03 октября 2018

Аргумент к Class.getResource не является именем файла.Это относительный URL, база которого является корнем каждой записи в пути к классам.getResource может никогда получить файл за пределами пути к классам.Поскольку ваше имя файла не является действительным URL-адресом относительно корня пути к классу, метод getResouce возвращает ноль (как задокументировано ).

Вы можете сделать, как предложил Джек Моксли, и правильно преобразовать файл вURL.

Однако класс Applet устарел .Вы должны воспроизводить звуки, используя пакет javax.sound.sampled :

try {
    Clip clip = AudioSystem.getClip();
    clip.open(AudioSystem.getAudioInputStream(file));
    clip.start();
} catch (UnsupportedAudioFileException | LineUnavailableException | IOException e) {
    throw new RuntimeException(e);
}
0 голосов
/ 03 октября 2018

Эта строка работает нормально?

System.out.println("You chose to open this file: " +
                    chooser.getSelectedFile().getName());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...