No se puede cargar una imagen almacenada

Tengo un formulario con ese código:

public Form() 
{
    initComponents();
    try 
    {
        File file= new File("avatar.jpg");
        BufferedImage image= ImageIO.read(file);
    } 
    catch (IOException ex) 
    {
        System.out.println("Failed to load image");
    }
}

El problema es que el código siempre arroja la IOException y entra en el bloque catch.
Entonces el archivo no se lee.
He creado el proyecto con Netbeans 7.2, y el directorio se ve así:

Directorio

¿Cuál es el problema? ¿Quizás el archivo no debería estar allí sino en el directorio padre? ¿O que?

Respuesta 1

¿Su imagen está empaquetada dentro de su jar? para descubrir esto, extraiga su archivo jar como lo haría con un archivo zip ordinario y verifique si la imagen está en algún lugar (normalmente ubicado por jarname \ packagename \ filename . Si es así, deberá extraer su imagen como un recurso usando getResourceAsStream().

Sería algo así como:

public class Test {
  private static final String absName = "/yourpackage/yourimage.jpg";

  public static void main(String[] args) {
    Class c=null;
    try {
      c = Class.forName("yourpackage.Test");//pkg is the package name in which the resource lies
    } catch (Exception ex) {
      // This should not happen.
    }
    InputStream s = c.getResourceAsStream(absName);
    // do something with it.
  }

    public InputStream getResourceAsStream(String name) {
      name = resolveName(name);
      ClassLoader cl = getClassLoader();
      if (cl==null) {
        return ClassLoader.getSystemResourceAsStream(name); // A system class.
      }
      return cl.getResourceAsStream(name);
    }

    public java.net.URL getResource(String name) {
      name = resolveName(name);
      ClassLoader cl = getClassLoader();
      if (cl==null) {
        return ClassLoader.getSystemResource(name);  // A system class.
      }
      return cl.getResource(name);
    }

    private String resolveName(String name) {
      if (name == null) {
        return name;
      }
      if (!name.startsWith("/")) {
        Class c = this;
        while (c.isArray()) {
          c = c.getComponentType();
        }
        String baseName = c.getName();
        int index = baseName.lastIndexOf('.');
        if (index != -1) {
          name = baseName.substring(0, index).replace('.', '/') + "/" + name;
        }
      } else {
        name = name.substring(1);
      }
      return name;
    }
}

Referencia:

Respuesta: 2

Parece que tiene un espacio de nombres de poker.* Todo depende de dónde se inicializa el jvm. ¿Dónde está tu principal? ¿Está adentro /Users/ramy/NetBeansProjects/Poker/src?

Además, le sugiero que lo use getResource()para todas sus necesidades de carga de archivos, especialmente dentro de tarros.

this.getClass().getResource("/resource/buttons1.png")
or
this.getClass().getResourceAsStream("/resource/TX_Jello2.ttf")

Puede averiguar dónde está la ruta predeterminada de sus programas haciendo lo siguiente:

System.getProperty("user.dir");
Respuesta: 3

Sin ver el error, diría que la causa más probable es que no puede encontrar el archivo. Así que le sugiero que reemplace "avatar.jpg" en el constructor de archivos con la ruta absoluta del archivo. p.ej

File file = new File("INSERT_PATH_TO_FILE/avatar.jpg");
Respuesta: 4

Tengo un problema con la creación de un archivo de texto con el nombre que quiero. Quiero crear un archivo de texto llamado: 'nombre de usuario' Sujetos. private void saveSubjects () {RegisterFrame r = new RegisterFrame (); ...

Estoy tratando de hacer lo siguiente ... Tengo una lista de cadenas en el siguiente modo: John, Peter, Carl Rose, Joanne, Natalie En este momento estoy leyendo línea por línea y produciendo una secuencia ... Como esta : ...

Estoy haciendo un sistema de pedidos con patrones de diseño de integración para una tarea escolar. Un cliente puede realizar un pedido y el intermediario que transmite una solicitud de suministro a todos los proveedores (más de 100), que ...

Los datos se cifran con OpenSSL en PHP y me gustaría descifrar Java, pero obtengo un error en Java Code for Encryption en PHP, función pública getEncryptedString ($ cardNumber, $ key_id) {$ ...