[Resolvido] Problema ao usar ImageIO.read() e URL

Olá gente!
Estou fazendo uma classe uma classe que irá carregar as imagens para o meu programa. O problema é que ele não quer carregar as imagens…
A parte do código que supostamente está causando problemas é essa:

[code] public class SpriteManager {
private HashMap sprites;

  public SpriteManager() {
    sprites = new HashMap();
  }
  
  private BufferedImage loadImage(String name) {
    URL url=null;
    try {
      url = getClass().getClassLoader().getResource(name);
      return ImageIO.read(url);
    } catch (Exception e) {
      System.out.println("Não conseguiu carregar a imagem " + name +" de "+url);
      System.out.println("O erro foi: "+e.getClass().getName()+" "+e.getMessage());
      System.exit(0);
      return null;
    }
  }[/code]

Ele exibe a seguinte mensagem de erro:

[color=red]Não conseguiu carregar a imagem img/imagem1.gif de null
O erro foi : java.lang.IllegalArgumentException input == null![/color]

O caminho da imagem está correto, antes ela até carregava, mas depois de uams modificações nessa classe, ela parou de carregar. Não sei o que estou fazendo de errado aqui… :?

ImageIO.read que está recebendo null, e isso é ilegal. O problema é que em:

url = getClass().getClassLoader().getResource(name);  

ClassLoader#getResource(String) está retornando nulo. Se olhares a especificação daquele método diz:

“Returns: A URL object for reading the resource, or null if the resource could not be found or the invoker doesn’t have adequate privileges to get the resource.”

O teu caso é provavelmente o primeiro (“resource could not be found”).

Nota que:

[list]um arquivo “r1.txt” dentro de um pacote “p1.p2.p3” vai ter o nome “p1/p2/p3/r1.txt”[/list]
[list]não importa de onde estás invocando getResource(), o nome do resource vais ser o mesmo (ou seja, path não é relativo)[/list]
[list]o arquivo do resource deveria estar no teu classpath (junto com os .class)[/list]
[list]tens múltiplos classloaders? Um classloader provedor não pode achar resources (ou classes) em classloaders clientes[/list]

Muito obrigada pela ajuda!!! :smiley:
Os arquivos de resource não estavam junto do classpath, só que eu não tinha me importado com isso, porque antes ele carregava tudo normal. Valeu mesmo !!! :wink:

eu to com o mesmo probema como que eu adiciono arquivos de resource no classpath?
no java buid path eu tenho que adicionar ou nas variaveis de ambientes?
não estou conseguindo fazer alguém poderia me explicar como eu adiciono?

Eu estou com um problema parecido, só que no meu caso, não é uma url e sim arquivo… o código é esse:

[code] File file = new File(“imagens/bali.tif”);
BufferedImage image = ImageIO.read(file);

    JFrame frame = new JFrame("Display Image: bali.tif");
    DisplayJAI display = new DisplayJAI(image);
    frame.getContentPane().add(new JScrollPane(display));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(600, 300);[/code]

Existe uma pasta “imagens” que contém os arquivos .tif. A mensagem de erro é:

Exception in thread “main” java.lang.IllegalArgumentException: image == null!
at com.sun.media.jai.widget.DisplayJAI.(DisplayJAI.java:88)
at pajai.Main.main(Main.java:32)
Java Result: 1

a linha

está retornando null…

  1. Faça:
    System.out.println(file.getCanonicalName()) na linha 3 e veja se o nome impresso é mesmo o do seu arquivo. Talvez a pasta esteja errada;

  2. Certifique-se que a extensão do seu arquivo seja mesmo .tif e não .tiff

  3. Certifique-se de que o arquivo não está vazio.

Pessoal,

eu estou com um problema mto parecido:

Eu tenho duas URL uma funciona e outra não, porem as duas abrem no browser mais quando transformo em URL e mando ler no ImageIO.read ele da erro de inpu==null!

Segue codigo:

 urlFile = new URL(auxiliar);				 		
				
 BufferedImage imagem = null;			
				
 imagem = ImageIO.read(urlFile);		
			

Alguem sabe me informar o que fazer ???