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 !!!!
- No use
File.separator
engetResource()
- siempre toma/
(getResource()
como URL HREF). - 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. - Verifique que
good.PNG
sea el caso correcto. No importa en el sistema de archivos de Windows, perogetResource()
mayúsculas y minúsculas.