Изображение Java портится, когда я запускаю файл .jnlp - PullRequest
0 голосов
/ 02 марта 2009

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

public void newImg(String i)
{
    try
    {
        File file = new File(i);
        img = ImageIO.read(file);
    }
}
Кстати,

img - это изображение с буферизацией.

Ответы [ 3 ]

2 голосов
/ 02 марта 2009

Шансы - это путь, который вы указываете файлу, или разрешения не совпадают. Поместите 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
$ 
1 голос
/ 02 марта 2009

Возможно, вы не загружаете свое изображение должным образом. Не используйте относительное местоположение файла. Это будет отличаться для каждой ОС. Ваше изображение в 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)

0 голосов
/ 20 марта 2009

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

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

...