NullPointerException при разборе URL-адреса на ImageIcon - PullRequest
2 голосов
/ 04 июня 2011

Я следую нескольким учебникам по JMonkey2.1

Когда я запускаю эти учебники, я получаю исключения NullPointerException, когда новые ImageIcons загружаются с использованием java.net.URL.

// generate a terrain texture with 3 textures
ProceduralTextureGenerator pt = new ProceduralTextureGenerator(heightMap);
pt.addTexture(new ImageIcon(Lesson3.class.getClassLoader().getResource("path/to/file")), -128, 0, 128); //line 199
pt.addTexture(new ImageIcon(Lesson3.class.getClassLoader().getResource("dirt.jpg")), 0, 128, 255);
pt.addTexture(new ImageIcon(Lesson3.class.getClassLoader().getResource("highest.jpg")), 128, 255, 384);
pt.createTexture(32);

Но когда я анализирую путь к файлу как строку вместо того, чтобы читать их как java.net.URL, они работают нормально.

Например: new ImageIcon("path/to/file")

Этотакое трассировка стека

Jun 4, 2011 4:18:22 PM class jme.test.Lesson3 start()
SEVERE: Exception in game loop
java.lang.NullPointerException
at javax.swing.ImageIcon.(ImageIcon.java:167)
at jme.test.Lesson3.buildTerrain(Lesson3.java:199)
at jme.test.Lesson3.initGame(Lesson3.java:151)
at com.jme.app.BaseGame.start(BaseGame.java:74)
at jme.test.Lesson3.main(Lesson3.java:62)
at jme.test.Main.main(Main.java:14)
Jun 4, 2011 4:18:22 PM com.jme.app.BaseGame start
INFO: Application ending.

В чем может быть причина этого?Спасибо ..

Ответы [ 2 ]

5 голосов
/ 04 июня 2011

Чтобы использовать ClassLoader#getResource(), ресурс должен находиться в пути к классам.

Когда он находится в том же пакете , что и класс Lesson3, тогда сделайте так

new ImageIcon(Lesson3.class.getResource("image.png"));

Когда он находится в другом пакете , используйте абсолютный путь от корня пути к классу, т. Е. Начинайте с /.

new ImageIcon(Lesson3.class.getResource("/com/example/image.png"));

.файл image.png должен находиться в пакете com.example.

Использование new File() не рекомендуется для относительных путей, так как это зависит от текущего рабочего каталога, который, в свою очередь, зависит от того, как вы запустили приложениекоторый не контролируется изнутри приложения.

0 голосов
/ 04 июня 2011

Если вы пытаетесь получить файлы пути относительно вашего класса и getclass (). Get recourse не работает, используйте File. Создайте галочку с именем с изображением и используйте новый imageIcon (file.getAbsoltuePath);

Я не могу показать вам пример, потому что я на своем iPad.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...