NPE при поиске файла в ресурсах

228
01 апреля 2018, 20:15

Хочу воспроизвести wav из jar (но пока написать, код и чтобы он хотя бы воспроизвел в idea).

InputStream in =  this.getClass().getResourceAsStream("parser_uploaded.wav");
        try {
            AudioInputStream ain= AudioSystem.getAudioInputStream(in); // ругается на эту строку
        } catch (UnsupportedAudioFileException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

Пробовал разные пути :

                       lib/src/main/resources/parser_uploaded.wav
                       src/main/resources/parser_uploaded.wav
                       resources/parser_uploaded.wav

Пробовал и так писать.

  InputStream in =  this.getClass().getClassLoader().getResourceAsStream("main/resources/parser_uploaded.wav");
Exception in thread "JNativeHook Dispatch Thread" java.lang.NullPointerException
    at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(SoftMidiAudioFileReader.java:134)
    at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1113)
    at com.example.Main.PlaySound(Main.java:417)
    at com.example.Main.nativeKeyPressed(Main.java:344)
    at org.jnativehook.GlobalScreen$EventDispatchTask.processKeyEvent(GlobalScreen.java:561)
    at org.jnativehook.GlobalScreen$EventDispatchTask.run(GlobalScreen.java:521)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

Класс, из которого пытаюсь получить, находится сразу по пути com/exemple

lib.gradle модуля

apply plugin: 'java'
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '3.11.0'

}
sourceCompatibility = "1.7"
targetCompatibility = "1.7"

и вот проекта:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.2'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
allprojects {
    repositories {
        jcenter()
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

Попробовал поочередно в оба build.gradle добавить вот это: не работает. Ни каких папок ресурсов в jar нет и через idea NPE по прежнему.

sourceSets {
        main {
            resources {
                srcDirs "src/main/resources"
            }
        }
    }
Answer 1

Вот так должно работать. Путь нужно указывать относительно папки resources.

InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("parser_uploaded.wav");
Answer 2

Попробуй FileInputStream.

FileInputStream is = new FileInputStream(new FIle("res/sound.wav"));
Answer 3

Как и заметил etki, проблема была где-то в сборке проекта. Сам проект у меня был очень некорректный. Решил не заморачиваться с поиском конкретной проблемы, а просто создал новый и запустил сборку через Gradle. И файлы появились в конечном jar и находятся корректно. Единственное, что не понял, почему они оказались в корне jar, а не в какой нибудь папке resources. Думаю, об этом надо сообщить gradle.

READ ALSO
обновление Activity, когда пользователей находится в самой Activity, которая нуждается в обновление

обновление Activity, когда пользователей находится в самой Activity, которая нуждается в обновление

Добрый день, подскажите пожалуйста, у меня есть база в которую в фоновом режиме записываются входящие сообщения, из этой базы берутся данные...

258
Проблема с подключением сервлетов на Glassfish5

Проблема с подключением сервлетов на Glassfish5

Я новичок в Java, и вот недавно занялась изучением серверовНачала с Tomcat и с ним проблем не возникло, затем я перешла на Glassfish

211
Создание уведомлений на Андроид

Создание уведомлений на Андроид

Всем доброго времени суток, пожалуйста, помогитеПроблема в том, что уведомления мои показываются раньше времени

182