Изображение Java портится, когда я запускаю файл .jnlp

StackOverflow https://stackoverflow.com/questions/600907

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть метод, который вызывается в начале моей программы, и он отлично работает, когда я запускаю 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)

Убедитесь, что у вас правильное имя/путь к файлу.

Убедитесь, что у вас есть доступ к файловой системе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top