Изображение Java портится, когда я запускаю файл .jnlp
Вопрос
У меня есть метод, который вызывается в начале моей программы, и он отлично работает, когда я запускаю jar, но когда я запускаю файл jnlp, он выходит из строя.
public void newImg(String i)
{
try
{
File file = new File(i);
img = ImageIO.read(file);
}
}
Кстати, img — это буферизованное изображение.
Решение
Вероятность того, что путь, который вы даете файлу, или разрешения не совпадают.Поместите File ctor в блок try, поймайте исключение и выясните, что это такое.
Это должно выглядеть примерно так:
try {
File file = new File(i);
img = ImageIO.read(file);
} catch (Exception ex) {
// You probably want to open the java console, or use a logger
// as a JNLP may send stderr someplace weird.
Systemm.err.println("Exception was: ", ex.toString());
}
Код, который у вас есть, ничего не делает с исключением.
Возможно, вы захотите посмотреть поток исключений в учебнике по Java.
обновлять
Смотрите мои комментарии.Я просто попробовал кое-что и подтвердил свои мысли: код с try {}
и нет catch
или finally
даже не скомпилируется.если вы действительно думаете, что работаете с этим кодом, вы, вероятно, загружали старый файл класса;этот не скомпилировался.
$ cat Foo.java
public class Foo {
public void tryit() {
try {
File f = new File(null);
}
}
}
$ javac Foo.java
Foo.java:3: 'try' without 'catch' or 'finally'
try {
^
1 error
$
Другие советы
Возможно, вы неправильно загружаете изображение.Не используйте относительное расположение файла.Это будет отличаться для каждой ОС.Ваше изображение в JAR должно быть правильно загружено следующим образом:
URL url = this.getClass().getResource("image.jpg");
Image img = Toolkit.getDefaultToolkit().getImage(url);
Это загрузит файл image.jpg, который находится в том же месте, что и класс.Вы также можете использовать такие вещи, как File.pathSeparator, если он находится в другом месте.
Используйте один из этих двух методов, чтобы загрузить его как ресурс:
http://java.sun.com/javase/6/docs/api/java/lang/Class.html#getResource(java.lang.String) http://java.sun.com/javase/6/docs/api/java/lang/Class.html#getResourceAsStream(java.lang.String)
Убедитесь, что у вас правильное имя/путь к файлу.
Убедитесь, что у вас есть доступ к файловой системе.