una ruta proyecto poner obtener manejo imagenes imagen guardar carpeta cargar java jar embedded-resource

java - ruta - Accede a las imágenes dentro



obtener la ruta de una imagen en java (1)

Primero. Sé que ya existe una variedad de temas sobre cómo acceder a la imagen dentro del archivo jar. Segundo. Intenté muchas opciones y ninguna de ellas funcionó. Por supuesto que sé que en algún lugar me equivoco. ¿Puedes ayudarme a entender lo que estoy haciendo mal?

entonces, tengo un prototipo de proyecto con el nombre ''j'' y contiene solo una clase Java - Cliente. Cliente tratando de acceder a la imagen good.png. Después de empacar todo en el archivo jar ejecutable, el cliente no puede acceder al archivo. Trabajo en eclipse y uso hormiga

j/ -src/ --com/ ---pupcom/ ----Client.java -images/ --good.png -build.xml -.classpath -.project

com.pupcom.Client contiene

package com.pupcom; //imports; public class Client { public static void main(String [] a) { new Client(); } public Client() { URL imageURL = getClass().getClassLoader().getResource("images"+File.separator+"good.png"); if(imageURL != null){ Image image = Toolkit.getDefaultToolkit().getImage(imageURL); if(image != null){ System.out.println("Complete!"); }else{ System.out.println("image == null"); } }else{ System.out.println("imageURL == null"); } } }

build.xml:

<?xml version="1.0" encoding="UTF-8"?> <project name="j" basedir="."> <property name="src.dir" value="src"/> <property name="build.dir" value="build"/> <property name="main-class" value="com.pupcom.Client"/> <property name="jar.name" value="j.jar"/> <target name="clean"> <delete dir="${build.dir}"/> <delete file="${jar.name}"/> </target> <target name="compile" depends="clean"> <mkdir dir="${build.dir}"/> <mkdir dir="${build.dir}/images"/> <copy todir="${build.dir}/images"> <fileset dir="images" /> </copy> <javac srcdir="${src.dir}" destdir="${build.dir}" /> </target> <target name="run" depends="jar"> <java jar="${jar.name}" fork="true"/> </target> <target name="jar" depends="compile"> <jar destfile="${jar.name}"> <fileset dir="${build.dir}" /> <manifest> <attribute name="Main-Class" value="${main-class}"/> </manifest> </jar> </target> </project>

También usé estas líneas:

URL imageURL = getClass().getClassLoader().getResource(File.separator + "images"+File.separator+"good.PNG"); URL imageURL = getClass().getClassLoader().getResource("good.PNG"); URL imageURL = getClass().getResource(File.separator + "images"+File.separator+"good.PNG"); URL imageURL = getClass().getResource("good.PNG"); URL imageURL = Client.class.getResource(File.separator + "images"+File.separator+"good.PNG"); URL imageURL = Client.class.getResource("good.PNG"); URL imageURL = Client.class.getClassLoader().getResource(File.separator + "images"+File.separator+"good.PNG"); URL imageURL = Client.class.getClassLoader().getResource("good.PNG");

¡¡¡¡¡¡¡¡¡¡Gracias por cualquier ayuda!!!!!!!!!!

Gracias a Marko Topolnik, el problema se solucionó al reemplazar ''File.separator'' a ''/''. Muchas gracias a Marko Topolnik !!!!


  1. No use File.separator en getResource() - siempre toma / ( getResource() como URL HREF).
  2. Prefijo la ruta con / para garantizar que el cargador de clases busque desde la raíz de la ruta de clase, en lugar de hacerlo en relación con el paquete de la clase.
  3. Verifique que good.PNG sea ​​el caso correcto. No importa en el sistema de archivos de Windows, pero getResource() mayúsculas y minúsculas.