Problema java

bLero

Hola maestros de la programación, tengo un pequeño problemilla en Java, espero que alguien me pueda ayudar.

El caso es que tengo una aplicación que tiene un packaje iconos con cientos de iconos y mi idea es mostrar esos iconos con sus nombre en un jComboBox.

El problema viene de que no sé como obtener una lista de los iconos del packaje.

En un directorio normal sería algo asi:

File dir = new File("/iconos/");
String [] iconos = dir.list();
JComboBox cb = new JComboBox(iconos);

pero al estar en un package dir.list() devuelve null.

tambien he probado a coger un icono del package y devolver su path pero tambien devuelve null

File dir = new File(getClass().getResource("/iconos/icono1.jpg").getPath());

¿Alguna idea? que no sea poner el String[] a mano con 1000 iconos claro, XD.

Shaktale

el paquete que dices cuelga de la raiz del proyecto no?? entonces... ruta por defecto hasta la carpeta

Me imagino

File fileIconos = new File(/iconos);
if(fileIconos.isDir()){
blablabla....

PD: no entiendo muy bien tú duda pero esto es lo que me he imaginado. el .getClass() creo que sobraría.

bLero

sí, cuelga de la raiz del proyecto por lo que la ruta debería ser "/iconos", pero al hacer dir.list() devuelve null, como si no encontrase nada en el directorio y entonces nose si por estar en un package debo acceder de otra manera.

Shaktale

pero qué es eso de iconos en un package??¿?¿ no entiendo :O
package = directorio?

Shendraf

Asegúrate dónde se encuentra la carpeta "iconos" dentro del proyecto porque la ruta no se forma a partir de la ubicación de la clase con el main. Por ejemplo:

proyecto
--src
----paquete1
------(clase main)
------iconos
--------icono1.jpg
----paquete2

Aquí lo incorrecto sería decirle File("/iconos/iconos.jpg"). 
Habría que especificarlo así: File("/src/paquete1/iconos/icono1.jpg"). Espero que te sirva de ayuda
dagavi

¿El problema no está justo en que ponéis "/" al inicio? De esa forma indicáis que estáis utilizando un path absoluto en vez de uno relativo.

Es decir, debería ser

new File("iconos");

Y esto siempre suponiendo que iconos se encuentra en el directorio raíz del proyecto (es decir, hay que tener en cuenta lo que indica #5).

Pero si te sirve de ayuda prueba el siguiente programa, y así verás que se ve en el directorio raíz:

public static void main(String[] args) {
	File file = new File(".");
	System.out.println("Directorio: " + file.getAbsolutePath());
	
File f[] = file.listFiles();
for (int i = 0; i < f.length; ++i) {
	System.out.println("    " + f[i].getAbsolutePath());
}
}

Y después ves poniendo el new File con ("src/iconos" ) o ("iconos" ), en función de si tienes iconos en la raiz, dentro de otra carpeta src/iconos o en otro tipo de jerarquía.

PD: Si por tenerlo dentro de un package te refieres a un archivo ".jar" yo para cargar imágenes en SWT utilizaba esto:

InputStream is = GetTitle.class.getClassLoader().getResourceAsStream(path);

SWT tiene la clase "Image" que carga desde un path o desde un inputstream. Si los archivos no están dentro de un ".jar" se puede utilizar directamente new Image(path) pero al empaquetarlo todo esto sirve para obtner el InputStream y que cargue la imagen. con new Image(is).

Pero vamos, esto tiene pinta de hacer casi lo mismo que el código que indicas, por lo que me sigo decantando por el "/" inicial xD

Usuarios habituales

  • dagavi
  • Shendraf
  • Shaktale
  • bLero