Java - Obtener directorio del ".class"

 
Vista:

Obtener directorio del ".class"

Publicado por jrariasf (6 intervenciones) el 26/09/2007 10:05:02
Hola,
¿Cómo puedo obtener el directorio en el que se encuentra el fichero ".class" de la clase que estoy ejecutando?

Por dar más información, la Property "user.dir" contiene "C:\Documents and Settings\Jose Ramon".
Sin embargo el directorio donde se encuentra el ".class" es "C:\Download\MisPruebas".

Me he creado un ejecutable con el JEXECreator y obtengo el fichero "C:\Download\MisPruebas\Prueba.exe".
Si desde la consola de MSDOS me voy al directorio "C:\Download\MisPruebas" y ejecuto el programa con así: "Prueba fichero", todo va bien.

Sin embargo, si desde Windows pincho y arrastro un fichero sobre el icono del ejecutable "Prueba.exe", me toma como "user.dir" el "C:\Documents and Settings\Jose Ramon" y entonces no encuentro unos ficheros de imágenes que tengo en el directorio original donde se encuentran las clases o el ejecutable que es "C:\Download\MisPruebas".

De ahí mi pregunta inicial.... no sé si habría alguna forma de obtener el directorio donde realmente se encuentra el ".class" y así actualizar la Property "user.dir".
Muchas gracias y un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Obtener directorio del

Publicado por María (17 intervenciones) el 26/09/2007 11:13:17
¿Por qué no pones la ruta absoluta de las imágenes en lugar de una relativa?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Obtener directorio del

Publicado por jrariasf (6 intervenciones) el 26/09/2007 11:35:36
Hola María,
Pues no pongo el path absoluto porque entonces estoy obligando a instalar la aplicación en un directorio concreto y quiero que sea válido en cualquier PC y para cualquier usuario.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Obtener directorio del

Publicado por Omar Yépez (68 intervenciones) el 26/09/2007 14:09:50
Lo puedes hacer así

getClass().getResource("el nombre del paquete va aquí");

Lo que yo te recomiendo es que cuando crees tu proyecto en el crees un paquete de solo imagenes por ejemplo

mi.paquete.de.imagenes

Así podrás decir por ejemplo para agregar imagenes a un Jlabel

jLabel8.setIcon(new javax.swing.ImageIcon(getClass().getResource("mi.paquete.de.imagenes.imagenPrueba.jpg")));

// donde imagenPrueba.jpg es una imagen dentro del paquete mi.paquete.de.imagenes

espero haberte ayudado........
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Obtener directorio del

Publicado por jrariasf (6 intervenciones) el 26/09/2007 15:12:20
Hola Omar,

Lo de las imágenes es un ejemplo que había puesto yo para intentar ser claro en la explicación. Realmente, los ficheros que no se encuentran en su lugar son unos ficheros de configuración que puede tocar a mano el usuario.
Pero ¿qué pasa?, pues que no me aparece como directorio de ejecución el directorio donde está el ejecutable "JSigpac.exe" (generado con JEXECreator) cuando utilizo el programa de una determinada forma. y esta forma es la siguiente:
- Desde el Explorador de Archivos de Windows, pPinchar y arrastrar un fichero de extensión ".rte" sobre el icono del ejecutable "JSigpac.exe".
En este caso, aunque el ejecutable lo tenga en "C:\Download\SIGPAC", lo que me sale como directorio de ejecución es:
"C:\Documents and Settings\José Ramón".
Y si pongo en el programa una traza para que me imprima la salida de getClass().getResource("JSigpac.class"), obtengo:
"jar:file:C:/Documents and Settings/José Ramón/Configuración Local/Temp/JEXE1E4.tmp/jsigpac.jar!/JSigpac.class"

El porqué de todo esto, intento explicarlo brevemente:
- He colgado en la red un programita llamado JSigpac que permite generar mapas más o menos grandes a partir de una serie de mapas o cuadrantes pequeños (Tienes más información en http://www.lanzadera.com/jsigpac).

Para facilitar su uso a la gente y que no tuviese que andar ejecutando con "java JSigpac", lo que hice fue generar un ejecutable "JSigpac.exe" con una utilidad que hay port ahí llamada JEXECreator.
Hasta ahora no ha habido ningún problema pero una opción del programa es que si se le pasa el nombre de un fichero como primer argumento, pues a continuación descarga el mapa topográfico asociado a la ruta que hay en ese fichero.
Con lo cual, si tú desde el Explorador de Windows pinchas y arrastras un fichero con una ruta sobre el icono del ejecutable "JSigpac.exe", automáticamente empieza a descargar y a generar el mapa topográfico.
Pero ¿cuál es el problema? Pues que al hacerlo así, el directorio de trabajo, en lugar de ser el directorio donde está el ejecutable, pasa a ser otro que es el "C:\Documents and Setting\José Ramón" (o el usuario que sea).

Y resulta que en el directorio donde está el ejecutable hay un subdirectorio llamado "dat" donde guardo algunos ficheros que pueden ser modificados por el usuario para configurar diferentes cosas del programa. Pero laro, no encuentra esos ficheros de configuración porque busca en la supuesta carpeta "dat" del directorio "C:\Documents and Setting\José Ramón".

No sé si ha quedado más o menos claro el problema... El caso es que el programa consta al final de un ejecutable y de una carpeta que cuelga del mismo directorio en el que se encuentra el ejecutable. Pero como el directorio de ejecución cambia dependiendo de si:
1.- o bien utilizo el método de pinchar y arrastrar un fichero sobre el icono del ejecutable; o bien
2.- ejecuto el programa haciendo doble-click sobre él y ya después en el interfaz gráfico que ofrece cargo el fichero con la ruta.

Cualquiwer ayuda se agradece.
Muchas gracias y un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Obtener directorio del

Publicado por Omar Yépez (68 intervenciones) el 26/09/2007 16:28:55
No se si entendi bien pero prueba esto a ver si es lo que necesitas:

/*
* Main.java
*
* Created on 26 de septiembre de 2007, 10:13 AM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package ejecutable;

import java.net.URL;
import java.net.URLClassLoader;

/**
*
* @author Omar Yépez
*/
public class Main {
public String lblDia;
/** Creates a new instance of Main */
public Main() {
URLClassLoader loader = (URLClassLoader)ClassLoader.getSystemClassLoader();
URL[] urls = loader.getURLs();
System.err.println("Classpath size: " + urls.length);
for (int i=0; i < urls.length; i++)
lblDia = urls[i].toString();
new ventana();
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new Main();
}

public class ventana extends javax.swing.JFrame
{
public ventana()
{
setLayout(null);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setBounds(0,0,1000,500);
javax.swing.JLabel mostrarDia = new javax.swing.JLabel(lblDia);
mostrarDia.setBounds(5,5,1000,500);
add(mostrarDia);
setVisible(true);
}
}

}


Esta clase lo que hace es abrir una ventana donde muestra el url donde se esta ejecutando la clase.

si creas el jar lo puedes ejecutar desde cualquier directorio de tu pc

por ejemplo si colocas el jar en C: en windows la ventana mostrara

file:C:ejecutable.jar

espero haberte ayudado cualquier cosa aqui estare...............
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar